我不明白如何go比較匿名結構。我試圖理解這段代碼:package mainimport ( "fmt")type foo struct { bar string}func main() { var x struct { bar string } var y foo fmt.Println(x == y) // this prints true equals(x, y) // this prints false}func equals(a, b interface{}) { fmt.Println(a == b)}為什么會x == y產(chǎn)生收益true?它們具有不同的類型,因此我希望它們無法進行比較。而且,既然它們是平等的,為什么將它們強制轉換為interface{}使它們不平等?
2 回答

眼眸繁星
TA貢獻1873條經(jīng)驗 獲得超9個贊
為什么 x == y 為真?
如果所有字段都具有可比性,則結構值具有可比性。如果它們對應的非空白字段相等,則兩個結構值相等。
a 的零值string
是""
,所以x.bar
和y.bar
相等,因此x
和y
相等。
為什么將它們轉換為 interface{} 會使它們不平等?
同樣,來自語言規(guī)范的同一頁面:
接口值具有可比性。如果兩個接口值具有相同的動態(tài)類型和相等的動態(tài)值,或者兩者的值為 nil,則它們相等。

繁星coding
TA貢獻1797條經(jīng)驗 獲得超4個贊
它們具有不同的類型但具有可比性,因為結構具有相同的字段名稱/類型。如果您嘗試重命名該字段,它將無法編譯。
它們與 interface{} 值相當,但它們的動態(tài)類型不同 - 您可以使用 fmt%T
動詞檢查這一點
http://play.golang.org/p/x0w30RIb5a
添加回答
舉報
0/150
提交
取消