Comment puis-je vérifier si deux tranches sont égales?
go
go-reflect
wei2912
la source
la source
==
opérateur n'est défini dans Go que pour certains types, de plus, cette question est également légitime.slice can only be compared to nil
Je suis arrivé à développer dans Go et je me suis heurté à , et je me demandais s'il y avait un moyen golang idiomatique pour vérifier l'égalité des tranches ... si l'opérateur d'égalité n'est pas défini par le langage, alors je trouve raisonnable de demander le moyen le plus efficace pour l'accomplir. La question n'a pas dû être ferméeRéponses:
Vous devez parcourir chacun des éléments de la tranche et tester. L'égalité pour les tranches n'est pas définie. Cependant, il existe une
bytes.Equal
fonction si vous comparez des valeurs de type[]byte
.la source
for i, v := range a { if v != b[i] { return false } }
.Vous devez utiliser reflect.DeepEqual ()
la source
C'est juste un exemple en utilisant reflect.DeepEqual () qui est donné dans la réponse de @ VictorDeryagin.
Résultat:
Essayez-le dans Go Playground
la source
Si vous en avez deux
[]byte
, comparez-les en utilisant bytes.Equal . La documentation de Golang dit:Usage:
Cela imprimera
la source
Et pour l'instant, voici https://github.com/google/go-cmp qui
la source
Dans le cas où vous êtes intéressé à écrire un test, alors
github.com/stretchr/testify/assert
c'est votre ami.Importez la bibliothèque au tout début du fichier:
Ensuite, à l'intérieur du test, vous effectuez:
L'erreur demandée sera:
la source
assert.Equal
utilise en internereflect.DeepEqual
ce qui pourrait ralentir vos tests et éventuellement votre pipeline.