Go を使用する場合、さらに処理するために配列をスライスに変換する必要がある状況に遭遇することがあります。配列は固定サイズの要素のコレクションですが、スライスは動的であり、必要に応じて拡大または縮小できます。
次のシナリオを考えてみましょう。バイトの配列を返す関数があります:
func Foo() [32]byte {...}
この関数の結果を、バイトのスライスを期待する別の関数に渡したいとします:
func Bar(b []byte) { ... }
単純に代入する
d := Foo() Bar(d)
のように配列をスライスに変換すると、型の不一致によりコンパイル エラーが発生します。配列をスライスに変換するには、[:] 構文を使用して、基になる配列を指すスライス ヘッダーを作成します。
func main() { x := Foo() Bar(x[:]) }
この操作では、基になるデータのコピーは作成されません。代わりに、配列と同じメモリ位置を参照するスライス ヘッダーが作成されます。
配列の変換と Bar 関数への受け渡しを示す完全な例を次に示します。
func Foo() [32]byte { return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} } func Bar(b []byte) { fmt.Println(string(b)) } func main() { x := Foo() Bar(x[:]) }
以上が関数を渡すために Go 配列をスライスに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。