Go のスライスの容量と長さを理解する
Go のチュートリアルから Go を学習すると、次のような質問に遭遇することがあります。
質問:
以下のコードでは、なぜスライス c と d は異なる値と容量で初期化されますか?
func main() { a := make([]int, 5) b := make([]int, 0, 5) c := b[:2] d := c[2:5] }
答え:
Go では、スライスは配列によってバックアップされます。 make でスライスが作成されると、バッキング配列はゼロ値で初期化されます。この場合、これは整数の配列であり、それぞれ 0 に初期化されます。
c が b のスライスとして作成されると、b と同じバッキング配列を共有します。 b は長さ 0 の配列で作成されたため、バッキング配列の最初の 2 つの要素は 0 です。したがって、c の長さは 2 で、その要素は両方とも 0 です。
d は次のスライスとして作成されます。 c はインデックス 2 から始まります。また、c と同じバッキング配列を共有します。ただし、フルスライス式なので容量が異なります。完全なスライス式の容量は、最初と最後のインデックスの差に等しいです。この場合、5 - 2 = 3 です。
追加リソース:
以上がGo スライス「c」と「d」の値と容量がスライス後に異なるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。