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

データをコピーせずに Go アレイをスライスに効率的に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-29 00:56:11
オリジナル
267 人が閲覧しました

How Can I Efficiently Convert a Go Array to a Slice Without Copying Data?

Go で配列をスライスに変換する

配列をスライスに変換するのは簡単なことのように思えるかもしれませんが、オンラインで明確な例を見つけるのは難しい場合があります。この記事では、特にバイト配列を操作する場合の、この問題に対する詳細な解決策を説明します。

Go では、配列は固定サイズの値のコレクションですが、スライスは動的にサイズが変更される参照型のビューです。基礎となる配列に変換します。バイトの配列をバイトのスライスに変換するには、構文 []byte(array) を使用できます。ただし、このアプローチでは基になるデータのコピーが作成されるため、効率が重要な一部のシナリオでは望ましくない場合があります。

より効率的な方法は、スライス構文 array[:] を利用することです。この式は、基になる配列を元の配列と共有するスライスを作成します。その結果、スライスまたは配列のいずれかに加えられた変更は両方に反映されます。

データのコピーを作成せずに変換プロセスを示すコード例を次に示します。

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[:])
}
ログイン後にコピー

この例では、Foo 関数はバイトの配列を返し、Bar 関数はバイトのスライスを入力として受け取ります。 Bar 関数が呼び出されると、x[:] 式を使用して、x と同じ基礎となる配列を共有するスライスが作成されます。 x に加えられた変更は Bar に渡されるスライスに反映され、その逆も同様です。

以上がデータをコピーせずに Go アレイをスライスに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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