gorm更新表现形式
字段声明 不是指针
- 如果不传值,update时 值不进行更新
- 如果传空值,update时 值不进行更新
字段声明 是指针
- 如果不传值,update时 值不进行更新
- 如果传空值,update时 值变为空
- 如果传nil, update时 值不进行更新
解决手动置nil的问题
json里的某个field设置为nil和 没有该field,本该表示不同意义。 可以以下方式解决
// util.go
type JSONWrap struct {
defined bool
Value interface{}
}
func (i *JSONWrap) UnmarshalJSON(data []byte) error {
i.defined = true
if string(data) == "null" {
i.Value = nil
return nil
}
return json.Unmarshal(data, &i.Value)
}
// 确认field有传值(用以区分json没有该field)
func (i *JSONWrap) Defined() bool {
return i.defined
}
// 确认field传值为null
func (i *JSONWrap) IsNull() bool {
if i.Value == nil {
return true
}
return false
}
// business.go
...
type schema struct {
ID int32 `form:"id"`
// 可选参数
Name *string `form:"name"`
Grade util.JSONWrap `form:"grade"`
}
...
...
if args.Grade.Defined() {
if args.Grade.IsNull() {
insideClass.Grade = nil
} else {
gradeFloat64, ok := args.Grade.Value.(float64)
...
insideClass.Grade = &grade
}
}