当前位置: 首页 > news >正文

Golang 中如何判断两个结构体相等

结论

golang中,哪些数据类型是可比较的,哪些是不可比较的:

  1. 可比较:Integer,Floating-point,String,Boolean,Complex(复数型),Pointer,Channel,Interface,Array
  2. 不可比较:Slice,Map,Function

同一个struct的两个实例能不能比较

type S struct {Name    stringAge     intAddress *int
}func main() {a := S{Name:    "aa",Age:     1,Address: new(int),}b := S{Name:    "aa",Age:     1,Address: new(int),}fmt.Println(a == b)   // false
}

输出false,说明:

  1. 可以比较,因为都是基础数据类型
  2. false:因为其中的指针变量 Address 的值不同,所以 a != b,如果a b 在初始化时把 Address 去掉(不给 Address 初始化),那么这时 a == b 为true, 因为ptr变量默认值是nil,又或者给 Address 成员变量赋上同一个指针变量的值,也是成立的。
type S struct {Name    stringAge     intAddress *intData    []int
}func main() {a := S{Name:    "aa",Age:     1,Address: new(int),Data:    []int{1, 2, 3},}b := S{Name:    "aa",Age:     1,Address: new(int),Data:    []int{1, 2, 3},}fmt.Println(a == b)  // invalid operation: a == b (struct containing []int cannot be compared)
}

报错:Slice,Map,Function不可比较

结构体比较推荐用法

type S struct {Name    stringAge     intAddress *intData    []int
}func main() {a := S{Name:    "aa",Age:     1,Address: new(int),Data:    []int{1, 2, 3},}b := S{Name:    "aa",Age:     1,Address: new(int),Data:    []int{1, 2, 3},}fmt.Println(reflect.DeepEqual(a, b))  // true
}

DeepEqual函数用来判断两个值是否深度一致。具体比较规则如下:

  • 不同类型的值永远不会深度相等
  • 当两个数组的元素对应深度相等时,两个数组深度相等
  • 当两个相同结构体的所有字段对应深度相等的时候,两个结构体深度相等
  • 当两个函数都为nil时,两个函数深度相等,其他情况不相等(相同函数也不相等)
  • 当两个interface的真实值深度相等时,两个interface深度相等
  • map的比较需要同时满足以下几个
  • -两个map都为nil或者都不为nil,并且长度要相等
  • -相同的map对象或者所有key要对应相同
  • -map对应的value也要深度相等
  • 指针,满足以下其一即是深度相等
  • -两个指针满足go的==操作符
  • -两个指针指向的值是深度相等的
  • 切片,需要同时满足以下几点才是深度相等
  • -两个切片都为nil或者都不为nil,并且长度要相等
  • -两个切片底层数据指向的第一个位置要相同或者底层的元素要深度相等
  • -注意:空的切片跟nil切片是不深度相等的
  • 其他类型的值(numbers, bools, strings, channels)如果满足go的==操作符,则是深度相等的。要注意不是所有的值都深度相等于自己,例如函数,以及嵌套包含这些值的结构体,数组等

相关文章:

Golang 中如何判断两个结构体相等

结论 golang中,哪些数据类型是可比较的,哪些是不可比较的: 可比较:Integer,Floating-point,String,Boolean,Complex(复数型),Pointer,Channel,I…...

code 架构

目录 1. code 架构1.1. 代码质量的评判的维度1.2. 架构师1.3. 基础平台篇1. code 架构 1.1. 代码质量的评判的维度 可阅读性 (方便代码流转)可扩展性 / 可维护性(方便修改功能, 添加新功能)可测试性 (质量管理)可复用性 (简化后续功能开发的难度)1.2. 架构师 软件工程是一项非…...

Nuxt 菜鸟入门学习笔记五:CSS 样式

文章目录 本地样式表在组件内导入通过 Nuxt 配置 CSS 属性导入使用字体导入通过 NPM 发布的样式表 外部样式表动态添加样式表【高级】使用 Nitro 插件修改渲染的头部 使用预处理器单文件组件 SFC 样式类和样式绑定使用 v-bind 的动态样式Scoped StylesCSS Modules预处理器支持 …...

java企业工程管理系统源码之提高工程项目管理软件的效率

高效的工程项目管理软件不仅能够提高效率还应可以帮你节省成本提升利润 在工程行业中,管理不畅以及不良的项目执行,往往会导致项目延期、成本上升、回款拖后,最终导致项目整体盈利下降。企企管理云业财一体化的项目管理系统,确保…...

蓝桥杯 2240. 买钢笔和铅笔的方案数c++解法

最近才回学校。在家学习的计划不翼而飞。但是回到学校了,还是没有找回状态。 现在是大三了,之前和同学聊天,说才大三无论是干什么,考研,找工作,考公,考证书 还都是来的及的。 但是心里面…...

中间件环境搭建配置过程解读

中间件环境搭建 目录 中间件环境搭建xampp 搭建环境Tomcat环境配置安装mysql连接mysql 问题解决 xampp 搭建环境 安装xampp服务集成环境工具 官网地址下载项目压缩包,将项目文件夹放在xampp安装目录的htdocs文件夹下初始化xampp:运行目录内的setup_xamp…...

Pytest 自定义HOOK函数

除了系统提过的HOOK函数外,也可以通过自定义HOOK的方式实现想要的功能。 首先创建一个py文件,里面定义自己的HOOK函数,主要pytest里面的hook函数必须以pytest开头。 #myhook.pydef pytest_myhook(user):"""自定义HOOK函数&q…...

VUE笔记(六)vue路由

一、路由的简介 1、实现生活中的路由 路由:路由其实就是一个key-value对应关系 路由器:用于管理多个路由关系的设备被称为路由器 2、前端的路由 目前使用的前端项目都是单页面的应用(SPA),一个项目中只有一个html页…...

nginx反向代理 负载均衡

目录 1.反向代理介绍: 2.七层代理和四层代理: 2.1 七层代理: 2.2 四层代理: 3.反向代理web服务器: 3.1 代理服务器配置: 3.2 服务器配置 : 3.3 客户端访问: 3.4 代理不同端口&am…...

hugging face inference API返回内容太短的问题

hugging face的inference api返回的内容默认很短,可以通过参数max_new_tokens进行设置: Detailed parameters When sending your request, you should send a JSON encoded payload. Here are all the options All parametersinputs (required):a str…...

react中redux的详细使用以及持久化处理

一.redux使用 1.安装 npm i redux 例一: 2.创建redux文件夹,store.js文件 store.js文件 import {legacy_createStore as createStore,combineReducers}from "redux" // 每一块状态内容对应一个reducer文件 import {CollApsedReducer} fro…...

论文笔记: 循环神经网络进行速度模型反演 (未完)

摘要: 分享对论文的理解, 原文见 Gabriel Fabien-Ouellet and Rahul Sarkar, Seismic velocity estimation: A deep recurrent neural-network approach. Geophysics (2020) U21–U29. 作者应该是领域专家, 对地球科学的理解胜于深度学习. 为方便讨论, 等式编号保持与原文一致.…...

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比 目录 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预…...

excel绘制直方图

Excel 2016直方图使用指南 excel绘制各种曲线十分方便,可以通过代码将计算的数据输出到excel里面,然后通过excel的插入标签,绘制各种需要的曲线。 对于直方图,横坐标是分布区间,纵坐标是这个区间内数值的频数&#x…...

react-grid-layout 实现原理介绍

简介 React-grid-layout 是一个基于 React 的网格布局库,它可以帮助我们轻松地在网格中管理和排列组件。它提供了一个直观的 API,可以通过配置网格的大小、列数和组件的位置来实现复杂的布局,还支持对网格中组件的拖拽和重新排列。 实现 诉…...

集合框架-(Collection/Map)

1.单列集合 1.1基础概要 集合中存储的是对象的地址信息,想要输出对象的信息,需要在具体的类中重写toString()方法 Collection代表单列集合,每个元素数据只包含一个值 List集合:添加的元素可以是有序、可…...

什么是单文件组件?

单文件组件形式 非单文件组件 可以理解为是通过 html 文件来使用 Vue。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><…...

国际站阿里云服务器多久会重启一次系统??

阿里云服务器是一种高性能、高可靠的云计算服务&#xff0c;但在长时间运行过程中&#xff0c;系统可能会出现一些问题&#xff0c;需要重启来恢复正常运行。那么&#xff0c;阿里云服务器多久重启一次系统呢&#xff1f;本文将对这个问题进行解答。 阿里云服务器重启频率 阿里…...

低成本32位单片机电动工具无感方波控制方案

RAMSUN介绍基于灵动32位微处理器MM32SPIN0230的BLDC电动工具无感方波控制方案&#xff0c;包括MM32SPIN0230芯片资源。 以下是电动工具无感方波控制方案的简述&#xff1a; MM32SPIN0230电动工具专用板 芯片介绍 MM32SPIN0230系列是灵动微MindSPIN旗下高性能的单电机控制产品…...

安防视频监控/视频集中存储/云存储平台EasyCVR平台无法播放HLS协议该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…...

仪式感,从来与你无关

2.2万人点赞的扎心评论:仪式感,从来都与你无关 有2.2万个男生偷偷点了赞。 没有歇斯底里的控诉,没有长篇大论的抱怨,只有一句轻飘飘的陈述,和一句"兄弟,没绷住"。 但就是这两句话,像一根针,精准地扎破了无数男生藏在心里最深处的、不敢说出口的委屈。 01…...

UE5安装避坑指南:从Launcher到C++编译的完整环境配置

1. 这不是“点下一步就行”的安装&#xff1a;UE5下载安装背后的真实门槛很多人第一次点开Epic Games官网&#xff0c;看到那个醒目的“Download Engine”按钮&#xff0c;下意识觉得&#xff1a;“不就是个游戏引擎安装包&#xff1f;跟装微信、装PS差不多&#xff0c;双击→下…...

Linux 硬盘分区管理

Linux 硬盘分区管理 摘要&#xff1a;本文系统介绍了 Linux 硬盘分区管理的核心概念与实用工具。首先阐述了硬盘分区的必要性&#xff0c;包括数据隔离、分类整理、降低风险等。随后详细对比了 MBR&#xff08;主引导记录&#xff09;和 GPT&#xff08;GUID 分区表&#xff09…...

终极指南:如何用AhabAssistantLimbusCompany彻底解放《Limbus Company》游戏时间

终极指南&#xff1a;如何用AhabAssistantLimbusCompany彻底解放《Limbus Company》游戏时间 【免费下载链接】AhabAssistantLimbusCompany AALC&#xff0c;PC端Limbus Company小助手。AALC&#xff0c;Limbus Company Assistant on PC 项目地址: https://gitcode.com/gh_mi…...

Django-tenants安全最佳实践:数据隔离与权限控制终极指南

Django-tenants安全最佳实践&#xff1a;数据隔离与权限控制终极指南 【免费下载链接】django-tenants Django tenants using PostgreSQL Schemas 项目地址: https://gitcode.com/gh_mirrors/dj/django-tenants 在构建SaaS应用时&#xff0c;数据隔离与权限控制是确保多…...

EASY-HWID-SPOOFER:Windows硬件指纹保护终极方案

EASY-HWID-SPOOFER&#xff1a;Windows硬件指纹保护终极方案 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER 在数字时代&#xff0c;您的电脑硬件信息正在被悄无声息地追踪。无论是…...

双榜第一!文心5.1登顶中文创意写作综合实力评测

【大力财经】5月18日&#xff0c;全球权威ICT领域市场研究机构Omdia发布《2026 年基础模型中文创意写作能力评估》报告&#xff0c;围绕中文创意写作七大核心维度&#xff0c;对 DeepSeek V4、文心5.1&#xff08;ERNIE 5.1&#xff09;、GPT 5.5 等 8大国内外主流顶级文本模型…...

Transformers 模型推理

Transformers 系列文章目录 第一章 Transformers 简介&#xff1b; 第二章 Transformers 模型推理 文章目录Transformers 系列文章目录前言Transformers模型推理一、Transformers读取预训练模型1.Transformers读取预训练模型&#xff0c;都是已经预训练好的&#xff0c;拿来即…...

Python运算符:比较运算符(等于不等等于大于小于)与返回值

Python运算符&#xff1a;比较运算符&#xff08;等于不等等于大于小于&#xff09;与返回值&#x1f4da; 本章学习目标&#xff1a;深入理解比较运算符&#xff08;等于不等等于大于小于&#xff09;与返回值的核心概念与实践方法&#xff0c;掌握关键技术要点&#xff0c;了…...

StarUML Java插件终极指南:高效实现UML与Java代码双向转换

StarUML Java插件终极指南&#xff1a;高效实现UML与Java代码双向转换 【免费下载链接】staruml-java Java extension for StarUML 项目地址: https://gitcode.com/gh_mirrors/st/staruml-java StarUML Java插件为Java开发者提供了强大的UML建模与代码生成能力&#xff…...