Fungsi yang dipanggil dalam Go boleh mendapatkan parameter fungsi panggilan melalui parameter fungsi. Dalam Go, parameter boleh dihantar ke fungsi mengikut nilai atau rujukan, dan fungsi boleh mendapatkan nilai atau penuding yang diluluskan oleh pemanggil melalui parameter. Jika parameter ialah jenis nilai, operasi di dalam fungsi akan dilakukan pada salinan parameter dan tidak akan menjejaskan nilai asal yang diluluskan oleh pemanggil. Jika parameter ialah jenis penunjuk, operasi di dalam fungsi akan mengubah suai nilai asal yang ditunjuk oleh penunjuk. Dengan cara ini, fungsi boleh mengakses dan mengubah suai parameter fungsi panggilan, membolehkan kefungsian yang lebih fleksibel. Sama ada jenis nilai atau parameter jenis penunjuk, fungsi boleh mendapatkan nilai atau penuding yang diluluskan oleh pemanggil melalui parameter dan melaksanakan operasi berkaitan di dalam fungsi.
Sila rujuk kod rujukan https://go.dev/play/p/yig2b6dkcoc (juga ditampal di sini):
Sama seperti kod ini - susunan hujah tidak dihantar ke fungsi sort.slice(), tetapi ia dicetak dengan baik dalam panggilan ke kaedah less() bagi pakej sort.
Apakah sifat yang membolehkan fungsi ini?
package main import ( "fmt" "sort" ) func main() { order := "abcd" s := "bca" fmt.Printf("ans: %v\n", customSortString(order, s)) } func customSortString(order string, s string) string { sort.Slice([]byte(s), func(a, b int) bool { fmt.Printf("order: %v\n", order) // <------ How does this work? order is not passed to sort.Slice() function. return s[a] < s[b] }) return "" }
https://www.php.cn/link/58b7483ba899e0ce4d97ac5eecf6fa99:
Tersurat fungsi ialah penutupan: ia boleh merujuk pembolehubah yang ditakrifkan dalam fungsi sekeliling. Pembolehubah ini kemudiannya dikongsi antara fungsi sekeliling dan literal fungsi, dan ia berterusan selagi ia boleh diakses.
Atas ialah kandungan terperinci Bagaimanakah fungsi yang dipanggil dalam Go mengakses parameter fungsi panggilan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!