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