golang中orm或gorm或json序列化结构体时零值的处理

Posted 玩家_名狱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang中orm或gorm或json序列化结构体时零值的处理相关的知识,希望对你有一定的参考价值。

golang中平常写orm的结构体时,可以通过工具快速生成数据表的映射结构体

http://sql2struct.atotoa.com/

生成的结构体或者自己写的结构体大概是这样子的

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序列化结构体时零值的处理的主要内容,如果未能解决你的问题,请参考以下文章

Go开源世界主流成熟ORM框架gorm实践分享

Golang 项目中 ORM 选择,gorm xorm 对比

Golang之ORM框架Gorm快速开始

Golang之ORM框架Gorm快速开始

Golang之ORM框架Gorm快速开始

golang orm 框架之 gorm