golang中orm或gorm或json序列化结构体时零值的处理(代码片段)

玩家_名狱 玩家_名狱     2022-12-06     536

关键词:

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标识

使用gorm的postgres中的“$ 1”或附近的golang语法错误

】使用gorm的postgres中的“$1”或附近的golang语法错误【英文标题】:golangsyntaxerroratornear"$1"inpostgresusinggorm【发布时间】:2022-01-1716:57:52【问题描述】:我正在尝试根据他们的姓名查找多个用户。我使用gorm如下:err:=db.Where(... 查看详情

golang反射自定义tag

...是程序在运行的时候能够“观察”并且修改自己的行为。golangreflect包实现了反射。动态的获得程序运行时对象的结构和信息。reflect包中提供了两个基础的关于反射的函数来获取上述的接口和结构体:funcTypeOf(iinterface)TypefuncValueOf... 查看详情

Golang 不能用作类型结构数组或切片文字

】Golang不能用作类型结构数组或切片文字【英文标题】:Golangcannotuseastypestructarrayorsliceliteral【发布时间】:2017-05-1203:51:52【问题描述】:我正在尝试在Go中编写一个函数,该函数采用带有目录URL的JSON并执行BFS以在该目录中查找... 查看详情

golang之orm框架gorm快速开始(代码片段)

Gorm快速入门Gorm是Go语言的ORM框架,其特点有:全特性ORM(几乎包含所有特性)模型关联(一对一,一对多,一对多(反向),多对多,多态关联)钩子(Before/AfterCreate/Save/Update/Delete/Find)预加载事务复合主... 查看详情

golang中级进阶(二):结构体

...json2.json转化成结构体3.结构体标签tag4.嵌套结构体和json的序列化反序列化Golang中没有“类”的概念,Golang中的结构体和其他语言中的类有点相似。和其他面向对象语言中的类相比,Golang中的结构体具有更高的扩展性和灵活性。Gol... 查看详情

golang快速入门json处理(代码片段)

...码(导出为字符串对象)和解码(导入为python对象)。在golang可通过标准库中的encoding/json 查看详情

golang之orm框架gorm快速开始(代码片段)

Gorm快速入门Gorm是Go语言的ORM框架,其特点有:全特性ORM(几乎包含所有特性)模型关联(一对一,一对多,一对多(反向),多对多,多态关联)钩子(Before/AfterCreate/Save/Update/Delete/Find)预加载事务复合主... 查看详情

golang项目中orm选择,gormxorm对比

参考技术A之前用beego中自带的orm,感觉有一些不是很满足需求的地方,而且想要尝试一些新的orm,写一篇记录一下。在xorm和gorm之间对比了一下:p.s.需要说明的是,对比非常初级,而且项目处于很早期,也抱着尝试一下不行再改... 查看详情

golang读写数据---下(代码片段)

GoLang读写数据---下格式化JSON数据反序列化:解码任意的数据:解码数据到结构编码和解码流XML数据格式用Gob传输数据Go中的密码学格式化JSON数据数据结构要在网络中传输或保存到文件,就必须对其编码和解码;目... 查看详情

golang中序列化和反序列化时JSON属性的不同名称

】golang中序列化和反序列化时JSON属性的不同名称【英文标题】:DifferentnamesofJSONpropertyduringserializationanddeserializationingolang【发布时间】:2021-07-2200:06:05【问题描述】:是否有可能:结构中有一个字段,但在Golang中的序列化/反序列... 查看详情

golang---序列化和反序列化(代码片段)

为什么要序列化和反序列化  我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,目前存在很多编码格式:json,XML,Gob,GoogleProtocolBuffer等,Go语言当然也支持所有这些编码格式。序列化与反序列化  序... 查看详情

使用 golang-migrate/migrate 进行 Gorm 迁移

】使用golang-migrate/migrate进行Gorm迁移【英文标题】:GormMigrationusinggolang-migrate/migrate【发布时间】:2021-02-0702:44:42【问题描述】:我决定使用gorm作为我的ORM。我想使用golang-migrate/migrate进行迁移,因为看起来GORM没有版本化的迁移文... 查看详情

如何指定数组gorm golang的默认值?

】如何指定数组gormgolang的默认值?【英文标题】:howtospecifydefaultvalueofarraygormgolang?【发布时间】:2022-01-1122:44:30【问题描述】:我用的是gorm和postgresql,这是模型typeBoardstructIduint`gorm:"primaryKey;autoIncrement;unique"json:"id"`Owneruint`json:"o... 查看详情

去 gorm 库反映

...rmlibrary【发布时间】:2016-02-1516:40:24【问题描述】:我在golang中使用gorm包(https://github.com/jinzhu/gorm)作为我的数据库库。我有很多类(数据库表),例如“Hotel”或“Package”。复制代码不是好的编程习惯。作为一个愚蠢的例子-假... 查看详情

go语言学习之旅--gorm(代码片段)

...是配置。默认情况下,GORM使用ID作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用Creat 查看详情

go语言学习之旅--gorm(代码片段)

...是配置。默认情况下,GORM使用ID作为主键,使用结构体名的蛇形复数作为表名,字段名的蛇形作为列名,并使用Creat 查看详情

Json反序列化器或正则表达式或Json解析以在c#中转换Json字符串

】Json反序列化器或正则表达式或Json解析以在c#中转换Json字符串【英文标题】:JsondeserializerORRegexOrJsonparsingtoconvertaJsonstringinc#【发布时间】:2017-07-1314:05:19【问题描述】:我有以下Json文件,我想将其转换为不同的格式。新格式如... 查看详情

学习笔记golang之gorm学习笔记(代码片段)

一、模型定义1.模型定义模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成,如:typeUserstructIDuintNamestringEmail*stringAgeuint8Birthday*time.TimeMemberNumbersql.NullStringActivedAtsql 查看详情