Go ツアー #11 でのスライス容量の変更について
Go ツアーでは、スライスを含む言語の機能についての洞察に富んだデモンストレーションが提供されます。スライド 11 では、整数のスライスを操作してそのプロパティを示します。しかし、ある観察により疑問が生じます。前の操作ではスライス容量が変化していないのに、なぜ最後の行では変化するのでしょうか?
スライス操作が容量に及ぼす影響を理解する
スライス容量とは、再割り当てが必要になる前に基になる配列が保持できる要素の最大数を指します。 Go Tour コード スニペットは次の操作を実行します:
理由最後の行の容量削減のため
ヘッダーの変更の視覚化
次のコードはスライス ヘッダーを出力します。これにより、追加の洞察が得られます。変更点:
<code class="go">func printSlice(s []int) { sh := (*reflect.SliceHeader)(unsafe.Pointer(&s)) fmt.Printf("header=%+v len=%d cap=%d %v\n", sh, len(s), cap(s), s) }</code>
出力は、最初の 2 つの要素が削除されると、ヘッダー データ ポインターが 272990208 から 272990216 に移動し、スライス容量が減少することを示しています。
以上がGo Tour スライド 11 の最初の 2 つの要素を削除するとスライス容量が減少するのに、スライスの長さを延長するとスライス容量が減少しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。