1 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
首先,您不需要指向接口的指針。一個(gè)接口已經(jīng)是一個(gè)指針。請參閱Go:interface{} 的含義是什么?
只需更改 Equals 方法以接受 aPointerComparable而不是 a *PointerComparable。Equals 將接受一個(gè)接口而不是一個(gè)指向接口的指針,但你仍然可以傳遞一個(gè)指向切片/任何東西的指針。見https://play.golang.org/p/e_Gtq2oAFA
其次,接收者Nullable不是一個(gè)接口,而你傳遞給 Equals 的參數(shù)是一個(gè)接口。這將解釋為什么Nullable接收器保持 nil 并且Comparable參數(shù)不是 nil,盡管它的底層切片是。問題是,Comparable參數(shù)是一個(gè)指向某物的接口,所以無論它指向什么,它都不會為零。
這段代碼解釋了這個(gè)問題:
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 關(guān)注
- 227 瀏覽
添加回答
舉報(bào)