Подтвердить что ты не робот

Преобразовать строку в массив байтов фиксированного размера в Go

Есть ли удобный способ для начального массива байтов?

package main
import "fmt"
type T1 struct {
  f1 [5]byte  // I use fixed size here for file format or network packet format.
  f2 int32
}
func main() {
  t := T1{"abcde", 3}
  // t:= T1{[5]byte{'a','b','c','d','e'}, 3} // work, but ugly
  fmt.Println(t)
}

prog.go: 8: не может использовать "abcde" (тип string) как type [5] uint8 в поле значение

если я изменю строку на t := T1{[5]byte("abcde"), 3}

prog.go: 8: не может преобразовать "abcde" (тип string), чтобы ввести [5] uint8

4b9b3361

Ответ 1

Вы можете скопировать строку в кусок массива байтов:

package main
import "fmt"
type T1 struct {
  f1 [5]byte
  f2 int
}
func main() {
  t := T1{f2: 3}
  copy(t.f1[:], "abcde")
  fmt.Println(t)
}

Изменить: использование именованной формы литерала T1, по предложению jimt.

Ответ 2

Есть ли какая-то конкретная причина, по которой вам нужен массив байтов? В Go вам будет лучше использовать байтовый срез.

package main
import "fmt"

type T1 struct {
   f1 []byte
   f2 int
}

func main() {
  t := T1{[]byte("abcde"), 3}
  fmt.Println(t)
}