golang中orm或gorm或json序列化结构体时零值的处理
Posted 玩家_名狱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang中orm或gorm或json序列化结构体时零值的处理相关的知识,希望对你有一定的参考价值。
golang中平常写orm的结构体时,可以通过工具快速生成数据表的映射结构体
生成的结构体或者自己写的结构体大概是这样子的
type Dianpu1 struct {
Id int `orm:"id" json:"id"` //自增主键
UserName string `orm:"user_name" json:"user_name"` //用户名
UserAge int16 `orm:"user_age" json:"user_age"` //用户年龄
UserGender string `orm:"user_gender" json:"user_gender"` //用户性别
}
问题是,当修改数据库的数据时,我们只想修改部分字段。如果我们对上面的结构体只赋值一部分时,通过orm库生成的数据中,没有赋值的字段就会默认为零值(例如:int类型为0,string类型为空),并且会写入数据库,导致其他字段的值出错。
可以在标签中添加 omitempty 标识,这样的话,没有手动赋值的字段就不会被使用
type Dianpu1 struct {
Id int `orm:"id,omitempty" json:"id"` //自增主键
UserName string `orm:"user_name,omitempty" json:"user_name"` //用户名
UserAge int16 `orm:"user_age,omitempty" json:"user_age"` //用户年龄
UserGender string `orm:"user_gender,omitempty" json:"user_gender"` //用户性别
}
如上面对orm标签添加omitempty标识,那么在orm操作数据库,没有手动赋值的字段不会有值。
但是如果对结构体进行序列化时,该标识就不起作用了,如果想起作用,也得和orm标识一样添加omitempty标识
以上是关于golang中orm或gorm或json序列化结构体时零值的处理的主要内容,如果未能解决你的问题,请参考以下文章