Je recherche un []interface{}
tranche pour un interface{}
valeur:
var v interface{}
for i := 0; i < len(A); i++ {
if (A[i] == v) {
fmt.Println("Gotcha!")
break
}
}
Dans le cas trivial, les types sont int
. Cependant, que dois-je faire si, par exemple, les types sont des struct
personnalisés?
Merci au commentaire @CodingPickle, je fournis ce qui suit à partir de la Go Programming Language Specification
Les opérateurs d'égalité == et! = S'appliquent à des opérandes comparables.
En ce qui concerne interface{}
s et structs
:
Vous pouvez également essayer ce terrain de jeu https://play.golang.org/p/bgO1_V87v9k
En d'autres termes, gérer l'égalité semble facile dans Go!
Mise à jour: depuis la rédaction de la question et des réponses ci-dessus, la langue de Go a légèrement changé.
Auparavant, si deux interfaces étaient comparées et que l'un des deux ou les deux contenaient un type non comparable, le temps d'exécution paniquait. Désormais, le runtime ne paniquera que s'ils contiennent tous les deux le type non comparable même. (S'ils contiennent des types différents, le résultat est désormais faux même si l'un ou l'autre type n'est pas comparable.)
Quels sont les types non comparables? Fondamentalement, ce sont des tranches, des cartes, des fonctions et tout type de structure ou de tableau qui les utilise.
AFAIK c'était un changement silencieux autour de Go 1.9 ou 1.10.