2015-12-12 9 views
11

Iが所定interface{}値に対して[]interface{}スライスを検索しています:確認平等{}

var v interface{} 
for i := 0; i < len(A); i++ { 
    if (A[i] == v) { 
    fmt.Println("Gotcha!") 
    break 
    } 
} 

の種類がintある些細な場合。しかし、たとえば、種類がカスタムの場合はどうすればよいですかstruct

+3

構造体が[comparable](https://golang.org/ref/spec#Comparison_operators)の場合、コードはそのまま動作します。 –

+1

@ CodingPickleのリンクされた文書から引用して少し拡大してください: 'インタフェース値は匹敵します。 2つのインタフェース値は、同じ動的型と等しい動的値を持つ場合、または両方が値nilを持つ場合、等しいです。 –

答えて

15

おかげで@CodingPickleのコメントに、私は、等価演算子は==と!=匹敵するオペランドに適用されますGo Programming Language Specification

から以下の提供します。

interface{} Sについて

structs

  • インタフェース値は同等です。 2つのインタフェース値は、同じ動的型と等しい動的値を持つ場合、または両方が値nilの場合は等しいです。
  • タイプXの値が匹敵し、XがTを実装する場合、非インタフェースタイプXの値xとインタフェースタイプTの値tは同等です。tの動的型がXと同じで、tの動的値がxと等しい。
  • 構造体の値はすべてのフィールドが同等であれば比較可能です。対応する非空白フィールドが等しい場合、2つの構造体の値は等しくなります。

つまり、Goで同じように扱うのは簡単です。