ホームページ > バックエンド開発 > Golang > Go スライス: スライス c と d にそれぞれの長さと容量があるのはなぜですか?

Go スライス: スライス c と d にそれぞれの長さと容量があるのはなぜですか?

Patricia Arquette
リリース: 2024-12-28 20:23:13
オリジナル
727 人が閲覧しました

Go Slices: Why Do Slices c and d Have Their Respective Lengths and Capacities?

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

このコードでは、長さと長さに関してさまざまな疑問が生じます。スライス c と d の容量:

  • c の長さはなぜ2 and contains [0,0]?

    b は最初は空 ([]、length=0) でしたが、Go の配列とスライスは常にゼロ値で初期化されることに注意することが重要です。整数の場合、ゼロ値は 0 です。したがって、[:2] で b をスライスすると、b のゼロ化された値を継承する新しいスライスが作成されます。

  • なぜ d の容量は 3 なのでしょうか?

    Go でスライスをスライスすると、同じ基になる配列が再利用されます。この場合、d は c と同じバッキング配列を共有します。 d の容量は、end-start として計算されます。start と end は、それぞれスライス式 ([2:5]) の開始インデックスと終了インデックスです。したがって、d の容量は 5 (終了) - 2 (開始) = 3 となります。

以上がGo スライス: スライス c と d にそれぞれの長さと容量があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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