Go のスライスについて話しましょう: 配列の動的デュオ!

Linda Hamilton
リリース: 2024-11-06 15:57:02
オリジナル
768 人が閲覧しました

Go について詳しく調べていると、スライスについて聞きます。 「スライスってそもそも何なの?」不思議に思うかもしれません。配列だけでは十分ではないでしょうか?さて、分解してみましょう!スライスは Go のキラー機能です。これらは配列に似ていますが、それよりもはるかに優れており、動的かつ柔軟で、プログラムの必要に応じて拡大および縮小できます。しかし、その過程で落とし穴が 1 つか 2 つあります。すべてを開梱してスライスに精通しましょう!

Let

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

スライスの中核は配列です。ただし、静的配列とは異なり、スライスは動的です。サイズを変更できるため、データのニーズが予測できない場合に非常に便利です。アイテムのリストがあると想像してください。アイテムが 5 個の場合もあれば、50 個の場合もあります。スライスすればそれは大したことではありません。サイズを変更するだけで、まるで魔法のようです。 ✨

しかし、これが問題です。スライスのサイズが変更されるたびに、その下にまったく新しい配列が作成され、データがこの新しい配列にコピーされます。便利?絶対に!ただし、ここには多少の計算コストがかかります。サイズを変更するたびに、Go は新しいメモリを割り当てて、内容をシャッフルする必要があることを意味します。

では、この野獣を飼いならすにはどうすればよいでしょうか?メーカーを入力してください

これは便利な Go のヒントです。スライスに多くのスペースが必要になることがわかっている場合は、make 関数を使用してください。 make([]T, len, cap) を使用すると、Go に「このタイプ、この長さ、この容量のスライスをください」と指示することになります。初期容量を準備しておくと、後でサイズを変更するコストを節約できます。賢いですね?

  • 例:
numbers := make([]int, 0, 100)
ログイン後にコピー
ログイン後にコピー

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

長さと容量: スライスの動的デュオ

すべてのスライスには長さ (len) と容量 (cap) があり、それぞれ異なる役割を果たします。

  • len(slice): これは、現在スライス内の要素の数です。
  • cap(slice): これは、サイズ変更が必要になる前にスライスが保持できる最大長です。 スライス x があるとします。長さ (len(x)) より大きい n を指定して x[n] にアクセスしようとすると、範囲外エラーが発生します。でも、心配する必要はありません。スライスに項目を追加していてその容量に達した場合、Go は内部でより大きな配列を割り当てます。あなたがしなければならないのは、コーディングを続けることだけです。

さらにアイテムを追加する必要がありますか?追加を満たします

スライスを拡大したい場合は、追加が頼りになる機能です。スライスの最後に要素を追加するように設計されており、必要に応じてスライスのサイズが自動的に変更されます。範囲外エラー (ほとんどの場合) に別れを告げましょう!

  • これが実際的な例です:
numbers := make([]int, 0, 100)
ログイン後にコピー
ログイン後にコピー

スライスに新しいアイテムを入れるのに十分な容量がある場合は、それが使用されます。そうでない場合は、追加により、より多くのスペースを持つ新しい配列が作成され、データが移動されます。とてもシンプルです! Effects Go によると、容量が不十分な場合、追加は「新しい基礎となる配列を割り当てる」とのことです。かなりきれいですね?

まとめ

Go のスライスはあなたの友達であり、強力な味方でもあります。これにより、メモリ管理の重要な詳細の一部を隠しながら、データのコレクションを柔軟に操作できるようになります。ただし、大きな力には大きな責任が伴うということを忘れないでください。サイズを変更するたびに、多少の計算オーバーヘッドが発生します。スライスがどのように機能するのか、make と append がどのように役立つのかを理解することで、効率的でエレガントな Go コードを作成できるようになります。

効果的なゴー

以上がGo のスライスについて話しましょう: 配列の動的デュオ!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!