Как сравнить [32]байт [с]байт в golang?
Я хочу сравнить выход sha256.Sum256 (), который является байтом [32]с байтом [].
Я получаю сообщение об ошибке "несоответствие типов [32]байт и Байт". Я не могу преобразовать [] байт в [32]байт.
есть ли способ сделать это?
2 ответов
вы можете тривиально преобразовать любой массив ([размер]T) в срез ([] T), разрезав его:
x := [32]byte{}
slice := x[:] // shorthand for x[0:len(x)]
оттуда вы можете сравнить его с вашим ломтиком, как вы бы сравнить любые другие два ломтика, например
func Equal(slice1, slice2 []byte) bool {
if len(slice1) != len(slice2) {
return false
}
for i := range slice1 {
if slice1[i] != slice2[i] {
return false
}
}
return true
}
Edit: как упоминает Дэйв в комментариях, есть также Equal
метод , bytes.Equal(x[:], y[:])
Я получил ответ, используя этот поток
SHA256 в Go и PHP дает разные результаты
converted := []byte(raw)
hasher := sha256.New()
hasher.Write(converted)
return hex.EncodeToString(hasher.Sum(nil)) == encoded
Это не преобразование [32]байта в [] байт, но он использует другую функцию, которая не дает вывода в [32]байт.