1 回答

TA贡献1846条经验 获得超7个赞
首先,您不需要指向接口的指针。一个接口已经是一个指针。请参阅Go:interface{} 的含义是什么?
只需更改 Equals 方法以接受 aPointerComparable而不是 a *PointerComparable。Equals 将接受一个接口而不是一个指向接口的指针,但你仍然可以传递一个指向切片/任何东西的指针。见https://play.golang.org/p/e_Gtq2oAFA
其次,接收者Nullable不是一个接口,而你传递给 Equals 的参数是一个接口。这将解释为什么Nullable接收器保持 nil 并且Comparable参数不是 nil,尽管它的底层切片是。问题是,Comparable参数是一个指向某物的接口,所以无论它指向什么,它都不会为零。
这段代码解释了这个问题:
var a interface{}
fmt.Println(a == nil) // true, the interface doesn't point to anything
var someNilSlice []int
fmt.Println(someNilSlice == nil) // true, just some nil slice
a = someNilSlice
fmt.Println(a == nil) // false, now the interface does point to something
- 1 回答
- 0 关注
- 260 浏览
添加回答
举报