「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > GOのスライスについて話しましょう:アレイのダイナミックなデュオ!

GOのスライスについて話しましょう:アレイのダイナミックなデュオ!

2025-03-23に投稿されました
ブラウズ:495

だから、あなたは外に飛び込んで、スライスについて聞いています。 「スライスとは何ですか?」あなたは不思議に思うかもしれません。アレイは十分ではありませんか?さて、それを分解しましょう!スライスはGOのキラー機能です。それらはアレイのようなものですが、はるかに涼しいです。動的で柔軟で、プログラムに必要に応じて成長して縮小することができます。しかし、途中で1つか2つのキャッチがあります。すべてを解き放ち、スライスに精通してください!

Let

スライス:ステロイドのアレイ

コアでは、スライスは配列です。しかし、静的配列とは異なり、スライスは動的です。サイズを変更できます。これは、データのニーズが予測不可能な場合に非常に便利です。アイテムのリストがあると想像してください。50個のアイテムである場合もありますが、50になる場合もあります。スライスはそれを大したことではありません。彼らはただ自分自身をサイズ変更します - ちょっと魔法のようです。 ✨

しかし、ここに取引があります。スライスがサイズを変更するたびに、その下に新しい配列が作成され、データがこの新しい配列にコピーされます。便利?絶対に!しかし、ここには少しの計算コストがあります。すべてのサイズの手段Goは新しいメモリを割り当て、周りに物事をシャッフルする必要があります。

それで、私たちはこの獣をどのように飼いならすのでしょうか? makeを入力します

ここにYAの便利なGoのヒントがあります。スライスのために多くのスペースが必要になることがわかっている場合は、Make関数を使用してください。 make([]、len、cap)で、あなたはゴーに言っています。初期容量を用意する準備ができていると、後でサイズを変更するコストが節約されます。スマート、正しい?

  • 例えば:
numbers := make([]int, 0, 100)

このスライスは100の容量で始まりますが、まだアイテムが含まれていません。常に物事を変更することなく、それを埋める準備ができています。長期的には、パフォーマンスを節約します。

長さと容量:スライスのダイナミックデュオ

すべてのスライスには長さ(len)と容量(キャップ​​)があり、異なる役割を果たします:

  • len(スライス):これは現在スライスにある要素の数です。
  • キャップ(スライス):これは、サイズを必要とする前にスライスが保持できる最大長です。 スライスxがあるとしましょう。長さ(len(x))より大きいnでx [n]にアクセスしようとすると、範囲外エラーが発生します。しかし、心配はありません!スライスにアイテムを追加し、その容量にヒットする場合は、フードの下でより大きな配列を割り当てるだけです。あなたがしなければならないことはコーディングを続けることだけです。

アイテムを追加する必要がありますか?付録に会います

スライスを成長させたい場合、付録は頼りになる機能です。スライスの端に要素を追加するように設計されており、必要に応じてスライスを自動的にサイズ変更します。アウトバウンドエラーに別れを告げる(まあ、ほとんど)!

  • これが実用的な例です。
numbers := []int{1, 2, 3}
numbers = append(numbers, 4, 5, 6)

スライスに新しいアイテムに適合するのに十分な容量がある場合、それを使用します。そうでない場合は、Appendはより多くのスペースを持つ新しい配列を作成し、データを移動します。そのように簡単です!効果的なGOによると、容量が不十分な場合、Appendは「新しい基礎となる配列を割り当てます」。かなりきちんと、そうですか?

まとめます

go in goのスライスはあなたの友人であり、それは強力なものです。メモリ管理のザラザラした詳細のいくつかを隠しながら、データのコレクションを柔軟に操作できるようにします。しかし、覚えておいてください:大きな力では大きな責任があります。すべてのサイズには、少しの計算オーバーヘッドが付属しています。スライスがどのように機能し、どのようにメーカーと追加が役立つかを理解することで、あなたは効率的でエレガントなGOコードを書くことに順調に進んでいます。

effection-go

リリースステートメント この記事は、https://dev.to/learngo/lets-talk-about-slices-in-go-the-dynamic-duo of-arrays-2c1?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3