Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah cara menukar kepingan Go kepada tatasusunan saiz tetap?
Menukar Kepingan kepada Tatasusunan Saiz Tetap
Ia adalah perkara biasa untuk menghadapi senario di mana anda perlu menukar hirisan kepada tatasusunan saiz tetap. Dalam Go, kepingan ialah struktur data dinamik yang boleh berkembang dan mengecut, manakala tatasusunan adalah saiz tetap dan mesti dimulakan dengan saiz tertentu.
Pertimbangkan kod berikut:
func gen(bricks []Brick) { if len(bricks) == 16 { if check(Sculpture{bricks}) { var b [16]Brick = bricks[0:16]; // Error: Cannot assign slice to array } } }
Dalam ini kod, kami cuba menukar kepingan bernama bata kepada tatasusunan saiz tetap b. Walau bagaimanapun, ini mengakibatkan ralat kerana kepingan dan tatasusunan mempunyai jenis yang berbeza.
Menggunakan salinan
Untuk menukar kepingan kepada tatasusunan saiz tetap, anda boleh menggunakan salinan fungsi. Fungsi salin menyalin elemen dari satu keping atau tatasusunan ke yang lain. Ia memerlukan dua argumen: kepingan destinasi atau tatasusunan dan kepingan sumber atau tatasusunan.
Contoh berikut menunjukkan cara menggunakan salinan untuk menukar kepingan kepada tatasusunan:
slice := []byte("abcdefgh") var arr [4]byte copy(arr[:], slice[:4]) fmt.Println(arr)
Dalam ini contoh, fungsi salin menyalin empat bait pertama hirisan ke tatasusunan arr. Tatasusunan yang terhasil akan mengandungi nilai [97 98 99 100].
Menggunakan penukaran kepingan ke tatasusunan (Go 1.17 )
In Go versi 1.17 dan lebih tinggi, ciri baharu telah diperkenalkan untuk menyokong penukaran slice-to-array. Ini membolehkan anda untuk menetapkan secara langsung hirisan kepada penuding tatasusunan tanpa menggunakan fungsi salin.
Contoh berikut menunjukkan penggunaan penukaran kepingan kepada tatasusunan:
s := make([]byte, 2, 4) s0 := (*[0]byte)(s) // s0 != nil s1 := (*[1]byte)(s[1:]) // &s1[0] == &s[1] s2 := (*[2]byte)(s) // &s2[0] == &s[0] // s4 := (*[4]byte)(s) // panics: len([4]byte) > len(s)
Dalam contoh ini , kami mencipta kepingan s dan kemudian menggunakannya untuk memulakan tiga penunjuk tatasusunan: s0, s1 dan s2. s0 ialah penunjuk kepada tatasusunan panjang sifar, s1 ialah penuding kepada tatasusunan satu elemen dan s2 ialah penuding kepada tatasusunan dua elemen.
Perhatikan bahawa ciri ini hanya tersedia untuk kepingan yang disokong oleh tatasusunan asas. Jika kepingan itu tidak disokong oleh tatasusunan, anda masih perlu menggunakan fungsi salin untuk menukarnya kepada tatasusunan.
Atas ialah kandungan terperinci Bagaimanakah cara menukar kepingan Go kepada tatasusunan saiz tetap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!