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