Just Cast Away

固定長の配列を可変長の配列にしたい。
つまり、[size]T の配列を、[]T のスライスに変換したいのです。しかし、キャストしてもエラーが出ます。

キャストできない系
foo := [64]byte{}
bar := []byte(foo)
// Output: cannot convert foo (type [64]byte) to type []byte

stringにキャストできない系
foo := [16]byte{}
bar := string(foo)
// Output: cannot convert foo (type [16]byte) to type string

「”golang” byteの配列を文字列に変換」でググっても、タイトルからは []byte のスライスを string にキャストする方法しか出てこなかったので、自分のググラビリティとして。

TL; DR (今北産業)

[:] を使ってslicing する(スライス化して割り当てる)

foo[:] は foo[0:len(foo)] と同等
foo := [64]byte{}
bar := foo[:]

// 型を確認する
fmt.Println(reflect.TypeOf(foo))
fmt.Println(reflect.TypeOf(bar))

hoge := [128]string{}
fuga := hoge[:]

// 型を確認する
fmt.Println(reflect.TypeOf(hoge))
fmt.Println(reflect.TypeOf(fuga))

// Output:
// [64]uint8
// []uint8
// [128]string
// []string

オンラインで動作を見る @ Go Playground

参考文献

How to compare [32]byte with []byte in golang? @ StackOverflow

Golang: 配列からスライスに変換する @ something tech.

Goのarrayとsliceを理解するときがきた @ Qiita