golang 中判断结构体中某一个属性是否存在(以区分零值)

2023-12-26 07:52

本文主要是介绍golang 中判断结构体中某一个属性是否存在(以区分零值),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原问题地址:validate-struct field if it exists

有定义结构

package mainimport ("fmt""encoding/json"
)type User struct {Name     string  `json:"name,omitempty"`Username *string `json:"username,omitempty"`Email    string  `json:"email,omitempty"`Town     string  `json:"town,omitempty"`//more fields here
}func main() {var u, u2 Userjson.Unmarshal([]byte(`{"username":"hi"}`), &u)fmt.Println("username set:", u.Username != nil, *u.Username)json.Unmarshal([]byte(`{}`), &u2)fmt.Println("username set:", u2.Username != nil)fmt.Println("Hello, playground")
}

反射方式

import ("log""reflect"
)func main() {type test struct {A boolB boolC bool}v := new(test)metaValue := reflect.ValueOf(v).Elem()for _, name := range []string{"A", "C", "Z"} {field := metaValue.FieldByName(name)if field == (reflect.Value{}) {log.Printf("Field %s not exist in struct", name)}}
}

借助 json 库

package mainimport ("fmt""encoding/json"
)func main() {fmt.Println("Hello, World!")type Meta struct{FcTag struct{Name string `json:"name"`Value json.Number `json:"value"`} `json:"fc_tag"`}template := `{"fc_tag": {"name": "tiger"}}`var meta1 Metaerr := json.Unmarshal([]byte(template), &meta1)if err != nil {fmt.Println("err=", err.Error())}else{fmt.Printf("meta1=%#v\n", meta1.FcTag.Value)}template = `{"fc_tag": {"name": "tiger", "value": 1}}`var meta2 Metaerr2 := json.Unmarshal([]byte(template), &meta2)if err2 != nil {fmt.Println("err=", err2.Error())}else{fmt.Printf("meta2=%#v\n", meta2.FcTag.Value)}
}/*Hello, World!meta1=""meta2="1"
*/

给以后解决类似问题,提供了不错的思路👍🏻

这篇关于golang 中判断结构体中某一个属性是否存在(以区分零值)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/538616

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp