Go のスライスとその基になる配列を理解する
Go では、スライスは基になる配列の連続したセグメントを表します。配列をスライスすると、元の配列と同じ基になる配列を参照する新しいスライスが作成されますが、独自の長さと容量を持ちます。
スライスが配列から作成される次の例を考えてみましょう。
nums := [3]int{1, 2, 3} numSlice := nums[:2]
この場合、スライス numSlice には、配列 nums の最初の 2 つの要素が含まれます。ただし、スライス numSlice と元の配列 nums は両方とも、メモリ内の同じ基になる配列を指します。
スライスに要素を追加すると、基になる配列が変更されます。ただし、スライスの容量制限に達した場合は、追加要素を収容できるように基になる配列のサイズを変更する必要があります。
スライスの基になる配列にアクセスするには、Go でリフレクト パッケージと unsafe パッケージを使用できます。 reflect.SliceHeader 型は、基になる配列のポインターへのアクセスを提供します。
s := []int{1, 2, 3, 4} hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) data := *(*[4]int)(unsafe.Pointer(hdr.Data))
このコードは、基になる配列を型付き配列 (*[4]int) へのポインターとして取得し、配列を変更できるようにします。直接。
以上がGo スライスはその基礎となる配列とどのように関係するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。