Fungsi sebagai Parameter dalam Go
Dalam bahasa pengaturcaraan seperti Java, adalah mungkin untuk menghantar fungsi sebagai parameter kepada fungsi lain. Ini membolehkan tahap fleksibiliti dan penggunaan semula kod yang tinggi. Adakah Go menawarkan keupayaan yang serupa?
Penutupan Fungsi Go
Ya, Go menyokong pemindahan fungsi sebagai parameter melalui konsep yang dikenali sebagai penutupan fungsi. Penutupan ialah fungsi yang boleh merujuk kepada dan mengekalkan skop dan pembolehubah fungsi lampiran yang daripadanya ia diisytiharkan.
Pelaksanaan
Dalam Go, fungsi adalah kelas pertama warganegara, bermakna mereka boleh ditugaskan kepada pembolehubah, diluluskan sebagai hujah, dan dikembalikan sebagai nilai. Untuk menghantar fungsi sebagai parameter, hanya berikannya kepada pembolehubah jenis func(paramList) returnType.
Contoh
Pertimbangkan coretan kod berikut:
package main import "fmt" // define a function that converts an integer to a string func convert(x int) string { return fmt.Sprintf("%v", x) } // define a function that passes a function as a parameter func quote123(fn func(int) string) string { return fmt.Sprintf("%q", fn(123)) } func main() { result := quote123(convert) fmt.Println(result) // Output: "123" }
Dalam contoh ini, kami mentakrifkan fungsi yang dipanggil menukar yang menukar integer kepada rentetan nilai. Kami kemudian menghantar fungsi ini sebagai parameter kepada fungsi lain yang dipanggil quote123. Fungsi quote123 mengambil fungsi jenis func(int) rentetan sebagai hujah. Dalam fungsi tersebut, kami memanggil fungsi yang diluluskan dan lulus dalam nilai 123. Hasilnya dikembalikan sebagai rentetan yang disebut.
Contoh Tambahan
Anda juga boleh tentukan dan lulus fungsi tanpa nama sebagai parameter. Contohnya:
result := quote123(func(x int) string { return fmt.Sprintf("%b", x) }) fmt.Println(result) // Output: "1111011"
Dalam kes ini, kami menghantar fungsi tanpa nama yang menukar integer kepada perwakilan binarinya.
Antara Muka Fungsian
Go tidak mempunyai antara muka berfungsi eksplisit seperti Java atau C#. Walau bagaimanapun, anda boleh menentukan jenis anda sendiri yang memerlukan tandatangan fungsi tertentu. Sebagai contoh, anda boleh mentakrifkan jenis berikut:
type MyFunctionType func(int) string
Jenis ini memerlukan sebarang fungsi yang diluluskan sebagai parameter untuk mempunyai tandatangan berikut: rentetan func(int). Anda kemudiannya boleh menggunakan jenis ini untuk memastikan bahawa hanya fungsi dengan tandatangan yang betul diluluskan.
Kesimpulan
Go menyediakan mekanisme berkuasa untuk menghantar fungsi sebagai parameter melalui penutupan fungsi. Ini membolehkan banyak fleksibiliti dan penggunaan semula kod, menjadikan Go sebagai pilihan terbaik untuk aplikasi yang memerlukan fungsi tertib lebih tinggi.
Atas ialah kandungan terperinci Bolehkah Go Pass Berfungsi sebagai Parameter Seperti Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!