go
が匿名構造をどのように比較しているのか分かりません。Go:匿名の構造体を比較する
package main
import (
"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
利回りtrue
:私は、コードのこの部分を理解しようとしていますか?彼らはタイプが異なるので、比較することはできません。
と同じですが、なぜそれらをinterface{}
にキャストするとそれらが不等になりますか?
でこれを確認することができます。また、理由を説明するための仕様からこれら三つの引用符を追加することができます"2番目のオペランドの型に第1オペランドを代入可能でなければなりません"、 "値xはT型の変数に代入可能です(" xはTに代入可能 ")。これらのケースのいずれか: xの型はTと同じです。 "、" 2つの構造体の型は、フィールドのシーケンスが同じであれば同じです。 ndingフィールドは同じ名前、同じタイプ、同じタグを持ちます。 – Art