Как сравнить [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].