比较运算符
比较运算符比较连个运算元,并且生成一个无类型的布尔值。
== equal
!= not equal
< less
<= less or equal
> greater
>= greater or equal
在任何比较运算元中 2 种类型必须是可以分配的。
使用等于运算符 ==
和 !=
的运算元必须是可比较的。使用顺序运算符 <
, <=
, >
和 >=
必须是可比较的。这些限制导致比较运算符被定义成以下的方式。
布尔值是可比较的,两个布尔值当他们同为
true
或者 false 的使用是相等的整数值是可比较和排序的
浮点数是可比较和排序的,具体定义在 IEEE-754 标准中。
复数是可比较的,2 个复数当实部和虚部都相等时就是相等的。
字符串是可以比较和排序的。是按照字节顺序排序。
指针式可以排序的,连个指针当指向相同变量时是相同的,或者他们 2 个都是 nil。指向一个为非配的变量的结果是未定义的。
channel 是可比较的。当两个管道是用同一个 make 出来的,或者都是 nil 时时相等的。
接口值时可以比较的,2 个接口值时相等的如果 2 个标识符的动态类型是一样的或者他们都是 nil。
一个非接口类型的值 x 和一个接口类型的值 T 在非接口类型是可以比较的并且非接口类型实现了接口是是可以比较的。当他们的动态类型类型相同时时相等的。
当结构体内的所有字段都是可以比较的时候,他是可以比较的。连个结构体的值当非空字段都相等时他们是相等的。
数组类型的值时可比较的,如果数组的原属时可以比较的,那么当数组的所有值是相等的时候他们就是相等的。
使用两个动态类型的标识符来比较接口的值。如果这个类型的值时不可比较的,那么将会引起一个 panic。这个行为不仅仅时接口,数组结构体接口字段都有这个问题。
切片,map,和函数值都是不可比较的,然而,作为一个特殊的例子,切片,map 和函数的值的 nil 时可以比较的,指针,channel 和接口的值 nil 也是可以比较的。
const c = 3 < 4 // c is the untyped boolean constant true
type MyBool bool
var x, y int
var (
// The result of a comparison is an untyped boolean.
// The usual assignment rules apply.
b3 = x == y // b3 has type bool
b4 bool = x == y // b4 has type bool
b5 MyBool = x == y // b5 has type MyBool
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论