Go でデータを操作する場合、多くの場合、配列とスライスの間で変換する必要があります。 2 つの主な違いは、配列のサイズが固定であるのに対し、スライスは動的であり、必要に応じてサイズを変更できることです。これにより、異なる型を予期する関数間でデータを受け渡そうとするときに混乱が生じる可能性があります。
配列を返す関数があるとします。
func Foo() [32]byte {...}
そして、その結果をスライスを期待する別の関数に渡す必要があります。
func Bar(b []byte) { ... }
単純に配列をスライスに割り当てると、以下のように機能しません:
d := Foo() Bar(d)
これにより、「d (型 [32] バイト) を型 [] バイトに変換できません」というエラーが発生します。
正しいアプローチは、スライス構文 array[:] を使用して、 array:
x := Foo() Bar(x[:])
この構文は、コピーを作成せずに、基になる配列データを参照するスライスを作成します。これは、特に大きなバッファを扱う場合、効率的なデータ転送にとって重要です。
完全な動作例は次のとおりです:
package main import ( "fmt" ) 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 で配列をスライスにシームレスに変換できます。パフォーマンスを犠牲にしたり、不必要なデータコピーを導入したりすることはありません。
以上がGo アレイをスライスに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。