Menggunakan Penunjuk untuk Tatasusunan dalam Go
Apabila bekerja dengan tatasusunan dalam Go, menghantar penuding kepada kepingan kepada fungsi tidak disyorkan . Sebaliknya, adalah lebih baik untuk menghantar keseluruhan tatasusunan sebagai hirisan, kerana ia merupakan jenis rujukan yang cekap.
Melalui Kepingan sebagai Parameter
Dalam Go, hirisan ialah jenis rujukan, yang bermaksud mereka menunjuk kepada tatasusunan asas. Apabila menghantar kepingan ke fungsi, fungsi itu beroperasi secara langsung pada tatasusunan asas tanpa membuat salinan. Ini menjadikannya cekap untuk menghantar tatasusunan besar tanpa menyalin keseluruhan data.
Pendekatan Asal Menggunakan Penunjuk
Pendekatan awal, seperti yang dinyatakan dalam soalan, adalah untuk lulus penunjuk kepada tatasusunan:
func conv(x []int, xlen int, h []int, hlen int, y *[]int) { // Operations using the dereferenced pointer here... }
Walau bagaimanapun, pendekatan ini tidak digalakkan kerana ia tidak menggunakan faedah keping.
Sebaliknya menggunakan Keping
Untuk menggunakan kepingan dengan berkesan, fungsi boleh ditulis semula sebagai:
func conv(x, h []int, xlen, hlen int, y []int) { // Direct operations on the slice y... }
Memanggil fungsi ini akan melibatkan hantaran keseluruhan tatasusunan sebagai kepingan:
s := []int{1, 2, 3} conv(s, h, len(s), len(h), y)
Pendekatan ini menggunakan mekanisme rujukan yang cekap bagi kepingan, mengelakkan penyalinan tatasusunan yang tidak perlu.
Kesimpulan
Dalam Go, biasanya disyorkan untuk menghantar tatasusunan sebagai kepingan, menggunakan gelagat jenis rujukannya untuk kecekapan. Ini menghapuskan keperluan untuk menghantar penunjuk kepada tatasusunan secara terus dan membolehkan operasi lancar pada data asas.
Atas ialah kandungan terperinci Patutkah Saya Hantar Penunjuk kepada Tatasusunan atau Slices dalam Fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!