ホームページ > バックエンド開発 > Golang > Go スライスはその基礎となる配列とどのように関係するのでしょうか?

Go スライスはその基礎となる配列とどのように関係するのでしょうか?

Mary-Kate Olsen
リリース: 2024-12-11 06:28:10
オリジナル
157 人が閲覧しました

How Do Go Slices Relate to Their Underlying Arrays?

Go のスライスとその基になる配列を理解する

Go では、スライスは基になる配列の連続したセグメントを表します。配列をスライスすると、元の配列と同じ基になる配列を参照する新しいスライスが作成されますが、独自の長さと容量を持ちます。

スライスが配列から作成される次の例を考えてみましょう。

nums := [3]int{1, 2, 3}
numSlice := nums[:2]
ログイン後にコピー

この場合、スライス numSlice には、配列 nums の最初の 2 つの要素が含まれます。ただし、スライス numSlice と元の配列 nums は両方とも、メモリ内の同じ基になる配列を指します。

スライスに要素を追加すると、基になる配列が変更されます。ただし、スライスの容量制限に達した場合は、追加要素を収容できるように基になる配列のサイズを変更する必要があります。

スライスの基になる配列にアクセスするには、Go でリフレクト パッケージと unsafe パッケージを使用できます。 reflect.SliceHeader 型は、基になる配列のポインターへのアクセスを提供します。

s := []int{1, 2, 3, 4}
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s))
data := *(*[4]int)(unsafe.Pointer(hdr.Data))
ログイン後にコピー

このコードは、基になる配列を型付き配列 (*[4]int) へのポインターとして取得し、配列を変更できるようにします。直接。

以上がGo スライスはその基礎となる配列とどのように関係するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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