Di Golang, cara parameter fungsi diluluskan adalah sangat penting, kerana ia secara langsung mempengaruhi prestasi dan kebolehbacaan atur cara. Artikel ini akan meneroka tiga kaedah hantaran parameter fungsi di Golang: hantaran nilai, hantaran penunjuk dan hantaran rujukan.
1. Pelepasan nilai
Pengiriman nilai ialah kaedah yang paling biasa untuk menghantar parameter fungsi. Dalam kaedah ini, parameter akan disalin dan kemudian dihantar ke fungsi Pengubahsuaian parameter oleh fungsi tidak akan menjejaskan nilai asal.
Berikut ialah contoh:
func add(a, b int) int { a = a + b return a } func main() { x := 5 y := 3 z := add(x, y) fmt.Println(x, y, z) }
Dalam contoh ini, fungsi tambah menerima dua parameter jenis int, mengiranya dan mengembalikan nilai int baharu. Dalam fungsi utama, kami mentakrifkan dua pembolehubah int x dan y dan menetapkannya kepada 5 dan 3, kemudian panggil fungsi tambah dan simpan nilai pulangannya dalam pembolehubah z. Akhir sekali, kami mencetak nilai x, y, dan z.
Memandangkan salinan nilai x dan y diluluskan apabila fungsi dipanggil, operasi pada a dan b di dalam fungsi tidak akan menjejaskan pembolehubah x dan y asal. Oleh itu, hasil output ialah:
5 3 8
Kelebihan kaedah penghantaran ini ialah ia mudah dan jelas, mudah difahami dan dilaksanakan serta mengelakkan ralat yang tidak perlu yang disebabkan oleh berbilang kejadian pembolehubah yang sama. Kelemahannya ialah terdapat beberapa overhed tambahan kerana memori perlu disalin.
2. Hantaran penunjuk
Harian penunjuk adalah untuk menghantar alamat parameter kepada fungsi, dan nilai asal boleh diubah suai melalui penunjuk dalam fungsi.
Berikut ialah contoh:
func swap(a, b *int) { temp := *a *a = *b *b = temp } func main() { x := 5 y := 3 fmt.Println(x, y) swap(&x, &y) fmt.Println(x, y) }
Dalam contoh ini, pertukaran fungsi menerima dua penunjuk kepada jenis int sebagai parameter dan menukar nilai yang ditunjuk. Dalam fungsi utama, kami mentakrifkan dua pembolehubah int x dan y dan menetapkannya kepada 5 dan 3, kemudian panggil fungsi swap dan lulus alamat pembolehubah x dan y. Akhirnya, kami mencetak nilai x dan y dan kami dapat melihat bahawa ia telah ditukar.
Kelebihan hantaran penunjuk ialah nilai asal boleh diubah suai secara langsung, mengelakkan overhed memori penyalinan. Kelemahannya ialah ia boleh membuat kod sukar difahami kerana ia adalah cara hantaran tersirat dan memerlukan lebih banyak kod untuk mengendalikan manipulasi penunjuk.
3. Melepasi melalui rujukan
Melalui rujukan ialah menghantar rujukan parameter kepada fungsi Nilai asal boleh diubah suai dalam fungsi, tetapi tidak perlu menggunakan a penunjuk.
Berikut ialah contoh:
func incr(a *int) { *a++ } func main() { x := 5 fmt.Println(x) incr(&x) fmt.Println(x) }
Dalam contoh ini, fungsi incr menerima rujukan kepada int sebagai parameter dan menambah nilai yang ditunjukkannya. Dalam fungsi utama, kami mentakrifkan pembolehubah int x dan memberikannya nilai 5, kemudian panggil fungsi incr dan lulus rujukan x. Akhirnya, kami mencetak nilai x dan dapat melihat bahawa ia telah dinaikkan.
Kelebihan lulus melalui rujukan ialah nilai asal boleh diubah suai terus tanpa menggunakan penunjuk. Selain itu, ia juga merupakan kaedah penyampaian yang paling biasa digunakan di Golang. Kelemahannya ialah ia mungkin membuat kod sukar difahami kerana ia akan menghasilkan beberapa operasi tersirat.
Ringkasan
Di Golang, terdapat tiga cara untuk menghantar parameter fungsi: hantaran nilai, hantaran penunjuk dan hantaran rujukan. Setiap tiga kaedah ini mempunyai kelebihan dan kekurangan dan harus dipilih berdasarkan keadaan tertentu. Meluluskan nilai ialah kaedah yang paling mudah dan paling biasa digunakan, tetapi ia akan menanggung overhed penyalinan memori melalui penuding secara langsung boleh mengubah suai nilai asal, tetapi memerlukan lebih banyak kod untuk mengendalikan penuding melalui rujukan juga boleh mengubah suai yang asal; nilai, dan tidak memerlukan penunjuk, tetapi mungkin membuat kod sukar difahami.
Atas ialah kandungan terperinci Perbincangan tentang kaedah menghantar parameter fungsi di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!