下面的代码全部来自internal/app/model/impl/gorm/internal/entity/e_demo.go
// Demo demo实体
type Demo struct {
Model
RecordID string `gorm:"column:record_id;size:36;index;"` // 记录内码
Code *string `gorm:"column:code;size:50;index;"` // 编号
Name *string `gorm:"column:name;size:100;index;"` // 名称
Memo *string `gorm:"column:memo;size:200;"` // 备注
Status *int `gorm:"column:status;index;"` // 状态(1:启用 2:停用)
Creator *string `gorm:"column:creator;size:36;"` // 创建者
}
这里的 Code Name Memo是指针有什么其他考虑吗? 没理解这里是怎么考虑,为什么是指针.
这里用指针后,当修改demo实体的数据时,会把空值也覆盖掉,比如说修改用户信息,如果不填写新的用户密码,就会把密码一栏赋值为空,因为gorm只会判断是否是空值,空值不更新,非空值进行更新,改成指针后,就算指针指向的字符串是空值,也会把指针判断为非空值,因为指针的空值是null,这样就会把数据库原来的值覆盖掉,
我觉得这里应该不用指针,比如说用户的密码字段,因为没填数据的时候就应该不更改,而不是改为空
如果这里使用指针仅仅是因为想要提高效率,降低内存使用,我觉得没必要,因为Demo这个结构体实例化后,只要每次结构体传参数的时候都用指针就可以了,不会增加内存,因为传递的只是一个指针的空间,并没有整个结构体一起传参,比如说:
func (a Demo) String() string {
return toString(a)
}
// TableName 表名
func (a Demo) TableName() string {
return a.Model.TableName("demo")
}
改成下面这种,直接使用指针就可以
func (a *Demo) String() string {
return toString(a)
}
// TableName 表名
func (a *Demo) TableName() string {
return a.Model.TableName("demo")
}