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