Como posso verificar se duas fatias são iguais?
go
go-reflect
wei2912
fonte
fonte
==
operador é definido no Go apenas para alguns tipos; portanto, essa pergunta também é legítima.slice can only be compared to nil
, e estava pensando se existe uma maneira idiomática de golang para verificar a igualdade de fatias ... se o operador de igualdade não for definido pelo idioma, acho razoável perguntar da maneira mais eficiente para conseguir isso. Questão não precisa ser fechadoRespostas:
Você precisa fazer um loop sobre cada um dos elementos na fatia e testar. A igualdade para fatias não está definida. No entanto, existe uma
bytes.Equal
função se você estiver comparando valores do tipo[]byte
.fonte
for i, v := range a { if v != b[i] { return false } }
.Você deve usar reflect.DeepEqual ()
fonte
Este é apenas um exemplo usando reflect.DeepEqual () que é dado na resposta de @ VictorDeryagin.
Resultado:
Experimente no Go Playground
fonte
Se você tiver dois
[]byte
, compare-os usando bytes.Equal . A documentação de Golang diz:Uso:
Isso imprimirá
fonte
E, por enquanto, aqui está https://github.com/google/go-cmp, que
fonte
Caso você esteja interessado em escrever um teste, então
github.com/stretchr/testify/assert
é seu amigo.Importe a biblioteca no início do arquivo:
Então, dentro do teste, você faz:
O erro solicitado será:
fonte
assert.Equal
usa internamente oreflect.DeepEqual
que pode fazer com que seus testes sejam mais lentos e, eventualmente, seu pipeline.