按类型比较
基本数据类型始终可以与==
和!=
运营商:整数价值观,浮点数字,复杂的数字,布尔值价值观,细绳价值观,持续的价值观。
大批如果值包含可比较的元素类型,则它们是可比较的
指针值是可比较的。
渠道值是可比较的。
界面值是可比较的。
比较中界面值仅在动态类型可比较时才有效。
功能价值观,片价值观和地图值是不是可比性,它们只能与nil
,作为特殊情况。
比较规则
从Go规范:
布尔型值是可比较的。如果两个布尔值都相等,则它们相等
true
或两者false
。整数值是可比较的,并且以通常的方式排序。
浮点值具有可比性和有序性,如IEEE-754标准。
复杂的值是可比较的。如果两个复数值u和v相等
real(u) == real(v)
and
imag(u)== imag(v)`。细绳值是可比较的,并且按词法按字节顺序排序。
指针值是可比较的。如果两个指针值指向同一个变量或两个都具有值,则它们相等
nil
。指向不同零大小变量的指针可以相等或可以不相等。渠道值是可比较的。如果两个通道值是由相同的make调用创建的,或者两个通道都有值,则它们是相等的
nil
。界面值是可比较的。如果两个接口值具有相同的动态类型和相等的动态值,或者两个接口值都具有值,则它们是相等的
nil
。的x值非接口类型
X
和一个值t
的界面类型T
类型值可比X
是可比的X
贯彻T
。他们相等,如果t
的动态类型与X
并且t的动态值等于x
。结构如果它们的所有字段都是可比较的,则值是可比较的。如果两个结构值对应的非空白字段相等,则它们相等。
大批如果数组元素类型的值是可比较的,则这些值是可比较的。如果两个数组的对应元素相等,则它们相等。
比较失败
如果该结构包含一个类型不可比的字段,则比较时会出现编译时错误。
比较不可比类型:输入refect.DeepEqual()
这reflect
stdlib软件包提供了reflect.DeepEqual()
该函数接受两种类型,并返回一个布尔值:
func DeepEqual(x, y interface{}) bool
不同类型的值永远不会完全相等,因此,如果您传递2种不同类型,则总会得到false
。
大批当它们的对应元素深相等时,值深深相等。
结构如果它们对应的字段深相等,则值是深相等的。
功能如果两个值都相等,则值是完全相等的nil
;否则,它们就不会完全平等。
界面如果它们具有非常相等的具体价值,那么它们的价值就非常相等。
地图满足以下所有条件时,值将完全相等:-它们都是nil
或两者皆非nil
-它们具有相同的长度-它们是相同的地图对象或其对应的键(使用Go相等进行匹配)映射为深度相等的值。
指针如果使用Go's值相等,则值是非常相等的==
运算符,或者它们是否指向非常相等的值。
片满足以下所有条件时,值将完全相等:-它们都是nil
或两者皆非nil
-它们具有相同的长度,-它们指向同一基础数组的相同初始条目(即,&x[0] == &y[0]
)或它们对应的元素(最大长度)非常相等。
一个非零的空切片和一个nil
切片(例如,[]byte{}
和[]byte(nil)
)并不完全相等。
其他值-数字,布尔,弦乐, 和频道-如果使用Go的==运算符相等,则深度相等。
一些不可避免的“特殊”案例值得列举:值可能与自身不相等:-因为它是func
类型-因为它是一个浮点数NaN
价值-因为它是一个大批,结构, 或者界面包含这样的值
指针值始终指向自己,即使它们指向或包含此类有问题的值也是如此,因为它们使用Go's进行比较就等于==
运算符,并且无论内容如何,都足以成为深度相等的条件。
同样适用于切片和地图: 如果x
和y
是相同的切片或相同的地图,无论内容如何,它们都是完全相等的。
更多教程:
- 使用NGINX反向代理服务Go服务
- 在Go中复制结构
- Go Web服务器的基础
- 在Go中对地图类型进行排序
- 简而言之去指针
- 转到标签说明
- 开始日期和时间格式
- 使用Go进行JSON处理
- 可变参数函数
- 去弦备忘单
- 转到空界面说明
- 使用VS Code和Delve调试Go
- 命名为Go返回参数
- 在Go中生成随机数和字符串
- Go项目的文件系统结构
- Go中的二进制搜索算法
- 在Go中使用命令行标志
- GOPATH解释
- 使用Go构建一个命令行应用程序:lolcat
- 使用Go构建CLI命令:Cowsay
- 在Go中使用壳管
- Go CLI教程:财富克隆
- 使用Go列出文件夹中的文件
- 使用Go从GitHub获取存储库列表
- 去,将一小段字符串附加到文件中
- 去,将字符串转换为字节片
- 使用Go可视化您本地的Git贡献
- Go CPU和内存分析入门
- 解决Go程序中的“不支持索引”错误
- 测量Go程序中的执行时间
- 使用Go构建Web爬网程序以检测重复的标题
- 最佳实践:指针还是价值接收者?
- 最佳实践:您应该使用方法还是函数?
- Go数据结构:集
- 前往地图备忘单
- 在Go中生成泛型类型的实现
- Go数据结构:字典
- Go数据结构:哈希表
- 在“通过通道”中实现事件侦听器
- Go数据结构:堆栈
- Go数据结构:队列
- Go数据结构:二进制搜索树
- Go数据结构:图形
- Go数据结构:链表
- Go数据结构的完整指南
- 比较Go值
- Go是面向对象的吗?
- 在Go中使用SQL数据库
- 在Go中使用环境变量
- 上篇教程:PostgreSQL支持的REST API
- 在Go Web服务器上启用CORS
- 在Docker容器中部署Go应用程序
- 为什么Go是作为PHP开发人员学习的功能强大的语言
- 去,删除io.Reader.ReadString换行符
- 开始,如何观看更改并重建程序
- 去算一下自约会以来的月份
- 在Go中访问HTTP POST参数