Go スライスの先頭から要素を削除すると容量が変わるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-02 09:56:31
オリジナル
822 人が閲覧しました

Why Does Dropping Elements from the Beginning of a Go Slice Change Its Capacity?

最初の n 項目をドロップするとスライスの容量が変わるのはなぜですか?

Go では、スライスは次のような構造体として実装されます。

<code class="go">type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}</code>
ログイン後にコピー

スライスの出力に使用される関数を変更して、基になる配列へのポインタを含めると、次の出力が得られます:

ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13]
ptr=0x450000 len=4 cap=6 [2 3 5 7]
ptr=0x450008 len=2 cap=4 [5 7]
ログイン後にコピー

ご覧のとおり、最後の 2 つの項目をドロップすると、最初の 2 つの項目をドロップするとポインタは変更されません。これは、スライスが基本的に基礎となる配列へのウィンドウであるためです。先頭から項目をドロップすると、別のポインタを使用して新しい場所にスライスが強制的に再作成されますが、末尾から項目をドロップすると、既存のスライスの長さが調整されるだけです。

詳細については、次を参照してください。リソース:

  • [Go スライス: 使用法と内部](https://blog.golang.org/slices)
  • [スライス タイプ](https://go.dev /ref/spec#Slice_types)
  • [スライス式](https://go.dev/ref/spec#Slice_expressions)

以上がGo スライスの先頭から要素を削除すると容量が変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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