ホームページ  >  記事  >  バックエンド開発  >  Go スライスの先頭から要素を削除すると容量が変わるのはなぜですか?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 09:56:31812ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。