Est-il possible de définir l'égalité pour les types nommés/struct?
Après la lecture d'un une question relative à la sur l'utilisation de tranches de cartes, je suis devenu curieux au sujet de l'égalité en Aller.
Je sais que c'est possible de remplacer le equals
méthode de Java Object
. Est-il une manière similaire à définir comment les contrôles de types définis par l'utilisateur/les structures pour l'égalité? Si oui, il y aurait une solution de contournement pour le problème mentionné ci-dessus. J'ai pensé à l'aide de interface{}
valeurs pourrait être une solution, mais j'ai reçu le message d'erreur panic: runtime error: hash of unhashable type []int
.
- Pas pour autant que je sais. Pour contourner vous pouvez convertir des objets à un hashable type pour une utilisation dans les touches ou même mettre en place une table de hachage-carte à partir de zéro en utilisant des tableaux. (D'ailleurs, certains peut-être inattendues-types sont hashable: les pointeurs, et les structures dont les membres ne sont hashable types.)
- Voici la liste des "comparables" types: golang.org/ref/spec#Comparison_operators -- comprend les chaînes, étonnamment!
Vous devez vous connecter pour publier un commentaire.
Go prend en charge la vérification de l'égalité des structures.
Il ne fonctionnera pas avec le pointeur de champs (de la manière que vous voulez) parce que le pointeur adresses sont différentes.
Vous ne pouvez pas modifier l'opérateur d'égalité et il n'y a aucun moyen intégré pour ajouter le support pour les types personnalisés à utiliser
==
de la syntaxe. Au lieu de cela, vous devriez comparer les valeurs de pointeur à l'aide deréfléchir.DeepEqual
.Gardez à l'esprit il y a des bémols.
Non, ce n'est pas définissable par l'utilisateur. Aller a des règles strictes en ce qui concerne l'égalité, et même ce qui est comparable, qui lui-même est basé sur la cessibilité. Jetez un oeil à les opérateurs de Comparaison section de la spécification.
net.IP
type afunc (ip IP) Equal(x IP) bool
qui définit l'équivalence des adresses IP. Peut-être que pourrait être un modèle pour de telles méthodes.