特定の[]interface{}
値をinterface{}
スライスで検索しています:
var v interface{}
for i := 0; i < len(A); i++ {
if (A[i] == v) {
fmt.Println("Gotcha!")
break
}
}
自明な場合、型はint
です。しかし、たとえばタイプがカスタムstruct
の場合はどうすればよいですか?
@CodingPickleコメントのおかげで、私は Goプログラミング言語仕様 から以下を提供します
等価演算子==および!=は、比較可能なオペランドに適用されます。
interface{}
sおよびstructs
について:
この遊び場を試すこともできます https://play.golang.org/p/bgO1_V87v9k
言い換えれば、Goでの等式の処理は簡単なようです。
更新:上記の質問と回答が書かれてから、Go言語が少し変更されました。
以前は、2つのインターフェースが比較され、どちらかまたは両方に比較不可能なタイプが含まれていた場合、ランタイムはパニックになっていました。現在、ランタイムは、両方にsame比較不可能なタイプが含まれている場合にのみパニックになります。 (異なるタイプが含まれている場合、どちらのタイプも比較できない場合でも結果はfalseになります。)
比較できないタイプとは何ですか?基本的に、これらはスライス、マップ、関数、およびそれらを使用するすべての構造体または配列型です。
私の知る限り、これはGo 1.9または1.10の周りの静かな変更でした。