比尔萄堡

上帝说: “要有光” 于是,就有了光。


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

gorm更新时的空值与nil

时间: 2022-10-18 分类: Golang   Gorm   字数: 328 字 阅读: 1分钟 阅读次数:

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
	}
}
#gorm# #update# #nil#

标题:gorm更新时的空值与nil

作者:训导主任林作栋

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

data race
kafka 结构
训导主任林作栋

训导主任林作栋

戏谑的码农,北野武的拥趸,李安的迷弟,伍佰的Fans

55 日志
23 分类
62 标签
豆瓣
友情链接
  • Obsidian
  • V2EX
  • 关注黑客与极客
  • 廖雪峰
标签云
  • Linux 6
  • K8s 5
  • 数据库 5
  • Golang 4
  • Etcd 3
  • Mysql 3
  • Ai 2
  • Gitlab 2
  • Postgres 2
  • 前端 2
© 2010 - 2024 比尔萄堡
Powered by - Hugo v0.58.2 / Theme by - NexT
/
Storage by Vercel / 刘 ICP 备 18047355 号
0%