ホームページ > バックエンド開発 > Golang > 関数を渡すために Go 配列をスライスに変換するにはどうすればよいですか?

関数を渡すために Go 配列をスライスに変換するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-12 18:28:22
オリジナル
449 人が閲覧しました

How to Convert Go Arrays to Slices for Function Passing?

Go での配列からスライスへの変換

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート