Just Cast Away
固定長の配列を可変長の配列にしたい。
つまり、[size]T の配列を、[]T のスライスに変換したいのです。しかし、キャストしてもエラーが出ます。キャストできない系
foo := [64]byte{}
bar := []byte(foo)
// Output: cannot convert foo (type [64]byte) to type []bytestringにキャストできない系
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