Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Go Slices Berkaitan dengan Tatasusunan Dasarnya?

Bagaimanakah Go Slices Berkaitan dengan Tatasusunan Dasarnya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-11 06:28:10152semak imbas

How Do Go Slices Relate to Their Underlying Arrays?

Memahami Slices dan Tatasusunan Pendasarnya dalam Go

In Go, sekeping mewakili segmen bersebelahan tatasusunan pendasar. Menghiris tatasusunan menghasilkan kepingan baharu yang merujuk tatasusunan asas yang sama seperti tatasusunan asal, tetapi dengan panjang dan kapasitinya sendiri.

Pertimbangkan contoh berikut di mana kepingan dicipta daripada tatasusunan:

nums := [3]int{1, 2, 3}
numSlice := nums[:2]

Dalam kes ini, slice numSlice mengandungi dua elemen pertama nombor tatasusunan. Walau bagaimanapun, kedua-dua slice numSlice dan nombor tatasusunan asal menghala ke tatasusunan asas yang sama dalam ingatan.

Menambah elemen pada kepingan mengubah suai tatasusunan asas. Walau bagaimanapun, jika had kapasiti hirisan dicapai, tatasusunan dasar perlu diubah saiznya untuk menampung elemen tambahan.

Untuk mengakses tatasusunan dasar hirisan, anda boleh menggunakan pakej reflect dan tidak selamat dalam Go. Jenis reflect.SliceHeader menyediakan akses kepada penuding tatasusunan asas.

s := []int{1, 2, 3, 4}
hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s))
data := *(*[4]int)(unsafe.Pointer(hdr.Data))

Kod ini mendapatkan semula tatasusunan asas sebagai penuding kepada tatasusunan yang ditaip (*[4]int), membolehkan anda mengubah suai tatasusunan secara langsung.

Atas ialah kandungan terperinci Bagaimanakah Go Slices Berkaitan dengan Tatasusunan Dasarnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn