Вот решение, которое дает результат, указанный в вопросе. В частности, есть "," между каждым байтом и без пробела.
p := []byte("go")
var buf strings.Builder
if len(p) > 0 {
buf.Grow(len(p)*6 - 2)
for i, b := range p {
if i > 0 {
buf.WriteString(", ")
}
fmt.Fprintf(&buf, "0x%02x", b)
}
}
result := buf.String()
Тип strings.Builder используется, чтобы избежать выделения памяти при окончательном преобразовании в строку. Другой ответ использует bytes.Buffer, который выделяет память на этом шаге.
Размер компоновщика изначально достаточно велик, чтобы вместить представление каждого байта и разделителей. Другой ответ игнорирует размер разделителей.
Попробуйте это на игровой площадке Go .