Menukar Tatasusunan kepada Slices dalam Go
Menukar tatasusunan kepada kepingan mungkin kelihatan remeh, tetapi mencari contoh yang jelas dalam talian mungkin mencabar. Artikel ini menyediakan penyelesaian terperinci untuk isu ini, khususnya apabila bekerja dengan tatasusunan bait.
Dalam Go, tatasusunan ialah koleksi nilai bersaiz tetap, manakala sekeping ialah paparan bersaiz dinamik, jenis rujukan ke dalam tatasusunan asas. Untuk menukar tatasusunan bait kepada kepingan bait, sintaks []bait(tatasusunan) boleh digunakan. Walau bagaimanapun, pendekatan ini mencipta salinan data asas, yang mungkin tidak diingini dalam sesetengah senario di mana kecekapan adalah penting.
Kaedah yang lebih cekap ialah menggunakan tatasusunan sintaks hirisan[:]. Ungkapan ini mencipta kepingan yang berkongsi tatasusunan asas dengan tatasusunan asal. Akibatnya, sebarang perubahan yang dibuat sama ada pada kepingan atau tatasusunan akan ditunjukkan dalam kedua-duanya.
Berikut ialah contoh kod yang menunjukkan proses penukaran tanpa membuat salinan data:
package main import "fmt" func Foo() [32]byte { return [32]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} } func Bar(b []byte) { fmt.Println(string(b)) } func main() { x := Foo() Bar(x[:]) }
Dalam contoh ini, fungsi Foo mengembalikan tatasusunan bait dan fungsi Bar mengambil sekeping bait sebagai input. Apabila fungsi Bar dipanggil, ungkapan x[:] digunakan untuk mencipta kepingan yang berkongsi tatasusunan asas yang sama seperti x. Sebarang perubahan yang dibuat kepada x akan ditunjukkan dalam kepingan yang dihantar ke Bar, dan begitu juga sebaliknya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Go Array dengan Cekap kepada Slice Tanpa Menyalin Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!