抱歉,再次验证了,golang中无法通过实现接口来实现 == 或者 != 操作符中的比较。
这篇文章的内容是错的。
抱歉,未充分验证就发出了结果。
一句话总结:实现复杂类型的Comparable()接口即可,编译期会识别出来。
下面是例子代码:
package main
import "fmt"
type st struct {
a uint64
b uint64
c interface{}
}
func (s *st) Comparable(b *st) bool {
return s.a == b.a && s.b == b.b && s.c.(string) == b.c.(string)
}
func main() {
st1 := &st{
a: 1,
b: 2,
c: string([]byte{0x20, 0x20}),
}
st2 := &st{
a: 3,
b: 4,
c: "abcdefg",
}
st3 := &st{
a: 3,
b: 4,
c: string([]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g'}),
}
fmt.Println(*st1 == *st2) //false
fmt.Println(*st3 == *st2) //true, 注意不能去掉*, 否则就变成了指针比较
}