Go スライスのスライスと容量削減
Go でスライスを操作する場合、スライス操作がスライスに与える影響を理解することが不可欠です。容量。この記事では、スライス容量に対するさまざまなスライス操作のさまざまな影響に関する特定の質問に対処します。
次のコード スニペットを考えてみましょう:
package main import "fmt" func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Slice the slice to give it zero length. s = s[:0] printSlice(s) // Extend its length. s = s[:4] printSlice(s) // Drop its first two values. s = s[2:] printSlice(s) } func printSlice(s []int) { fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s) }
このコードには、整数のスライスがあります。 s.最初に印刷した後、さまざまなスライス操作を実行し、スライスの長さと容量への影響を観察します。
重要な疑問は、その理由です。 s = s[2:] 行は、s = s[:4] や s = s[:0] とは異なり、容量を削減します。違いは、使用される構文にあります。[2:] は、インデックス 2 からスライスの最後までのスライスを表し、最初の 2 つの要素を効果的に削除します。
スライスは、メモリ内の基礎となる配列の一部。スライスを変更するときは、配列へのポインタを変更します。
s = s[2:] の場合、スライスのポインタは最初の 2 つの要素をスキップして前に移動します。これにより、スライスが基になる配列のより小さい部分を指すようになるため、スライスの容量が実質的に削減されます。
残念ながら、最初の 2 つの要素を回復することはできません。 s = s[2:] を使用して切り取られたもの。これは、スライスのポインタが前方に移動し、元のデータが参照されなくなるためです。
Go スライスを操作する場合、スライス操作の動作を理解することが重要です。異なるスライス構文は容量にさまざまな影響を与える可能性があるため、予期しない結果を防ぐためにこれらの影響を認識することが重要です。
以上が`s = s[2:]` で Go スライスをスライスすると、`s = s[:0]` や `s = s[:4]` と比べて容量にどのような影響がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。