Skip to content

这里是bug吗?没理解这里的 Code Name Memo为什么是指针 #64

Open
@lchjczw

Description

@lchjczw

下面的代码全部来自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")
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions