(错误文章,勿看)【复习】如何让golang中的复杂类型可以使用==来比较


抱歉,再次验证了,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, 注意不能去掉*, 否则就变成了指针比较
}