ホームページ >バックエンド開発 >Golang >Go スライスの長さと容量の違いは何ですか?

Go スライスの長さと容量の違いは何ですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-15 14:27:15613ブラウズ

What's the Difference Between Length and Capacity in Go Slices?

Go スライスの容量と長さに​​ついて

Go の世界では、スライスは基本的なデータ構造です。ただし、その容量と長さは初心者にとってわかりにくい場合があります。実際の例を使用して概念を詳しく見てみましょう。

func main() {
  a := make([]int, 5)
  // [0,0,0,0,0] len=5 cap=5

  b := make([]int, 0, 5)
  // [] len=0 cap=5

  c := b[:2]
  // [0,0] len=2 cap=5

  d := c[2:5]
  // [0,0,0] len=3 cap=3
}

スライスの初期化について

a と b は両方とも make を使用して初期化されますが、パラメーターが異なります。 a は長さ 5、容量 5 の整数の配列を初期化します。一方、b は容量 5 の空の配列を初期化します。

ゼロ値と配列の初期化

ここでは初期化されていない変数という Go の概念が重要です。値を明示的に設定せずに変数を作成すると、その値はゼロ値で初期化されます。整数配列の場合、これはすべて 0 を含む配列を意味します。

スライスとゼロ値

[:2] で b をスライスすると、新しいスライスが作成されます。 c.このスライスは b と同じバッキング配列を指しますが、最初の 2 つの要素のみを指します。バッキング配列はゼロで初期化されているため、c には要素 [0,0] が含まれます。

スライスと容量

最後に、c を [2 でスライスすると、 :5] では、新しいスライス d を作成します。このスライスは c と同じバッキング配列を共有しますが、インデックスは異なります。 d の容量は、スライス後のバッキング配列内の残りの要素を表すため、5-2 = 3 です。

以上がGo スライスの長さと容量の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。