Penggunaan lanjutan hantaran parameter fungsi Go termasuk hantaran penunjuk dan hantaran rujukan. Hantaran penunjuk melepasi penunjuk pembolehubah kepada fungsi, membenarkan fungsi mengubah suai pembolehubah asal secara langsung. Rujukan pass-by-pass pembolehubah itu sendiri kepada fungsi, mengelakkan penyalinan yang tidak perlu dan terus mengubah suai pembolehubah asal.
Dalam bahasa Go, cara lalai untuk menghantar parameter fungsi adalah mengikut nilai, yang bermaksud salinan pembolehubah yang dihantar ke fungsi akan disalin di dalam fungsi . Walau bagaimanapun, bahasa Go juga menyediakan hantaran penunjuk dan hantaran rujukan, yang boleh mengelakkan operasi penyalinan yang tidak perlu dan membenarkan fungsi mengubah suai terus pembolehubah yang diluluskan oleh pemanggil.
Sintaks hantaran penunjuk adalah serupa dengan hantaran nilai, kecuali simbol *
符号。指针传递会将参数的指针(指向变量内存地址的值)传递给函数。
func Increment(n *int) { *n++ // 解引用指针并增加指向变量的值 }
实战案例:
让我们编写一个函数 Swap
来交换两个整数的值。使用值传递无法实现交换,因为函数内部对参数所做的修改不会影响调用者传递的原始变量。然而,使用指针传递可以做到这一点。
func Swap(a, b *int) { *a, *b = *b, *a // 解引用指针并交换值 } func main() { x, y := 10, 20 Swap(&x, &y) // 传递指针地址 fmt.Println(x, y) // 输出:20 10 }
引用传递与指针传递类似,不同之处在于引用传递不会复制指针,而是直接将变量本身传递给函数。引用传递的语法与指针传递相同,但类型前不会加上 *
符号。
实战案例:
让我们编写一个函数 UpdateSlice
func UpdateSlice(s []int) { for i := range s { s[i]++ // 直接修改切片中的元素 } } func main() { slice := []int{1, 2, 3} UpdateSlice(slice) // 传递引用 fmt.Println(slice) // 输出:2 3 4 }
rrreee
Lulus melalui rujukan🎜🎜Lulus melalui rujukan adalah serupa dengan lulus dengan penunjuk, kecuali daripada menyalin penunjuk, lulus melalui rujukan terus menghantar pembolehubah itu sendiri kepada fungsi. Sintaks untuk lulus melalui rujukan adalah sama seperti lulus melalui penunjuk, tetapi simbol*
tidak didahului oleh jenis. 🎜🎜Contoh Praktikal:🎜🎜Mari kami menulis fungsi UpdateSlice
untuk mengemas kini semua elemen dalam kepingan. Ini tidak boleh dicapai dengan cekap menggunakan nilai pas, kerana pengubahsuaian pada kepingan di dalam fungsi tidak menjejaskan kepingan asal yang diluluskan oleh pemanggil. Walau bagaimanapun, menggunakan rujukan lulus mengelakkan penyalinan yang tidak perlu dan secara langsung mengubah suai hirisan asal. 🎜rrreee🎜Ringkasan🎜🎜Bahasa Go menyediakan tiga kaedah lulus parameter: hantaran nilai, hantaran penunjuk dan hantaran rujukan, yang boleh memenuhi keperluan senario yang berbeza. Hantaran penunjuk dan hantaran rujukan boleh mengelakkan operasi penyalinan yang tidak perlu dan membenarkan fungsi mengubah suai terus pembolehubah yang diluluskan oleh pemanggil. Memilih kaedah lulus parameter yang sesuai boleh meningkatkan kecekapan dan kebolehbacaan atur cara. 🎜Atas ialah kandungan terperinci Penggunaan lanjutan dan teknik hantaran parameter fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!