インターフェースの等価性チェック{}
Go では、特にカスタム構造体を扱う場合、インターフェースの値を比較するのが少し難しい場合があります。{} 。この記事は、この側面に光を当て、次の質問に対する簡潔かつ包括的な回答を提供することを目的としています:
特にユーザー定義が関係する場合、インターフェース値の同等性を効果的にチェックするにはどうすればよいですか。{}構造体?
インターフェース{}等価
まず、interface{} 値が等価比較をサポートしていることを理解することが重要です。 2 つのインターフェース{} 値が等しいのは、それらが同一の動的タイプと等しい動的値を持つ場合、または両方の値が nil である場合です。
構造体とインターフェース
構造体の値をインターフェースの値に変換する場合、構造体の型の値が同等であり、構造体がインターフェースを実装している場合にのみ等価が成立します。{}さらに、構造体の動的タイプはインターフェースの動的タイプと一致する必要があり、その動的値はインターフェースの動的値と等しい必要があります。
例
次の例を考えてみましょう。この動作を図示します:
type MyStruct struct { Name string Age int } var v interface{} = MyStruct{Name: "John", Age: 30} var A = []interface{}{MyStruct{Name: "Alice", Age: 25}, MyStruct{Name: "Bob", Age: 35}} for i := 0; i < len(A); i++ { if A[i] == v { fmt.Println("Found") break } }
このシナリオでは、A[i] と v の間の等価性チェックは成功します。どちらの値も、同じフィールドを持つ MyStruct 型です。
結論
インターフェースの等価性と構造体の関係の概念を理解すると、Go での等価性チェックは管理可能になります。{}そしてインターフェース。これらの原則を理解することで、カスタム構造体を含むインターフェース値を自信を持って効果的に比較できます。
以上がGo で、特にカスタム構造体の場合、「interface{}」の値が等しいかどうかを比較するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。