Как сравнить [32] байт с [] байт в golang? Я хочу сравнить вывод sha256.Sum256(), который является [32] байтом с байт []. Я получаю ошибку "несогласованные типы [32] байт и [] байт". Я не могу преобразовать [] байт в [32] байт. Есть ли способ сделать это? Ответ 1 Вы можете легко преобразовать любой массив ([размер] 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 } Редактировать: как упоминает Дейв в комментариях, в пакете bytes также есть метод bytes.Equal(x[:], y[:]), bytes.Equal(x[:], y[:]) Ответ 2 Я получил ответ, используя этот поток SHA256 в Go и PHP дают разные результаты converted := []byte(raw) hasher := sha256.New() hasher.Write(converted) return hex.EncodeToString(hasher.Sum(nil)) == encoded Это не преобразование байт [32] в [], но использует другую функцию, которая не дает выход в байте [32].
Ответ 1 Вы можете легко преобразовать любой массив ([размер] 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 } Редактировать: как упоминает Дейв в комментариях, в пакете bytes также есть метод bytes.Equal(x[:], y[:]), bytes.Equal(x[:], y[:])
Ответ 2 Я получил ответ, используя этот поток SHA256 в Go и PHP дают разные результаты converted := []byte(raw) hasher := sha256.New() hasher.Write(converted) return hex.EncodeToString(hasher.Sum(nil)) == encoded Это не преобразование байт [32] в [], но использует другую функцию, которая не дает выход в байте [32].