Rumah > pembangunan bahagian belakang > Golang > Penggunaan lanjutan dan teknik hantaran parameter fungsi Golang

Penggunaan lanjutan dan teknik hantaran parameter fungsi Golang

WBOY
Lepaskan: 2024-04-14 08:33:02
asal
1070 orang telah melayarinya

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.

Penggunaan lanjutan dan teknik hantaran parameter fungsi Golang

Penggunaan lanjutan dan teknik penghantaran parameter fungsi dalam Go

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.

Hantaran penunjuk

Sintaks hantaran penunjuk adalah serupa dengan hantaran nilai, kecuali simbol * perlu ditambahkan sebelum jenis parameter. Lulus penunjuk melepasi penunjuk hujah (nilai yang menunjuk ke alamat memori pembolehubah) ke fungsi. * 符号。指针传递会将参数的指针(指向变量内存地址的值)传递给函数。

func Increment(n *int) {
    *n++ // 解引用指针并增加指向变量的值
}
Salin selepas log masuk

实战案例:

让我们编写一个函数 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
}
Salin selepas log masuk

引用传递

引用传递与指针传递类似,不同之处在于引用传递不会复制指针,而是直接将变量本身传递给函数。引用传递的语法与指针传递相同,但类型前不会加上 * 符号。

实战案例:

让我们编写一个函数 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
}
Salin selepas log masuk
Kes praktikal:

Mari kita menulis fungsi Tukar untuk menukar nilai ​​​​bagi dua integer. Pertukaran tidak boleh dilakukan menggunakan nilai pas kerana pengubahsuaian yang dibuat pada parameter di dalam fungsi tidak menjejaskan pembolehubah asal yang diluluskan oleh pemanggil. Walau bagaimanapun, ini boleh dilakukan menggunakan hantaran penunjuk.

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan