关于两个interface用“==”判等的做法

laobaiLee · · 882 次点击
这种问题明显应该查spec,golang的spec很短的 https://golang.org/ref/spec Comparison operators A value x of non-interface type X and a value t of interface type T are comparable when values of type X are comparable and X implements T. They are equal if t's dynamic type is identical to X and t's dynamic value is equal to x.
#1
更多评论
非常感谢。我再次翻看了文档,找到了比较操作符的说明。贴在下面以供学习。 在任何比较中,第一个操作数必须为可赋予第二个操作数的类型,反之亦然。 相等性操作符 == 和 != 适用于可比较操作数。 顺序操作符 <、<=、> 和 >= 适用于有序的操作数。这些比较操作的关系和值定义如下: 1、布尔值之间可比较。若两个布尔值同为 true 或同为 false,它们即为相等。 2、通常情况下,整数值之间可比较或排序。 3、根据 IEEE-754 标准的定义,浮点数值之间可比较或排序。 4、复数值之间可比较。对于两个复数值 u 与 v, 若 real(u) == real(v) 且 imag(u) == imag(v),它们即为相等。 5、根据按字节词法,字符串值之间可比较或排序。 6、指针值之间可比较。若两个指针指向相同的值或其值同为 nil,它们即为相等。 指向明显为零大小变量的指针可能相等也可能不相等。 7、信道值可比较。若两个信道值通过相同的 make 调用 (§创建切片、映射和信道)创建或同为 nil 值,它们即为相等。 8、接口值可比较。若两个接口值拥有相同的动态类型与相等的动态值,或同为 nil 值,它们即为相等。 9、当非接口类型 X 的值可比较且 X 实现了 T 时, 非接口类型 X 的值 x 与接口类型 T 的值 t 则可比较。 若 t 的动态类型与 X 相同且 t动态值等于 x,它们即为相等。 10、若两个结构值的所有字段可比较,它们即可比较。若其相应的非空白字段相等,它们即为相等。 11、若两个数组元素类型的值可比较,则数组值可比较。若其相应的元素相等,它们即为相等。
#2