ホームページ > バックエンド開発 > Golang > Go アレイをスライスに効率的に変換するにはどうすればよいですか?

Go アレイをスライスに効率的に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-09 16:13:16
オリジナル
922 人が閲覧しました

How Do I Efficiently Convert a Go Array to a Slice?

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

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

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