Bagaimana untuk mereka bentuk penutupan fungsi yang baik dalam bahasa Go? Hadkan saiz penutupan untuk menangkap pembolehubah yang diperlukan sahaja. Tangkap pembolehubah penutupan secara eksplisit, menggunakan anotasi jenis eksplisit atau dihantar secara eksplisit kepada penutupan. Elakkan penutupan rujukan pekeliling, elakkan penutupan merujuk skop luarnya, atau gunakan teknik pengumpulan sampah yang sesuai untuk memecahkan rujukan pekeliling.
Penutupan fungsi ialah teknik berkuasa yang membolehkan kami mengakses pembolehubah tempatan sesuatu fungsi selepas ia dilaksanakan. Dalam Go, penutupan dilaksanakan menggunakan fungsi tanpa nama (juga dikenali sebagai fungsi sebaris).
Penutupan terbentuk apabila fungsi tanpa nama merujuk pembolehubah dalam skop luarnya. Pembolehubah ini ditangkap sebagai sebahagian daripada penutupan dan kekal boleh diakses walaupun selepas fungsi luar selesai dilaksanakan.
Penutupan yang direka dengan baik membantu meningkatkan kebolehselenggaraan dan keteguhan kod anda. Berikut ialah beberapa garis panduan untuk mereka bentuk penutupan fungsi yang baik dalam Go:
Penutupan menangkap pembolehubah luaran, yang mungkin menyebabkan kebocoran memori atau tingkah laku yang tidak dijangka. Oleh itu, cuba hadkan saiz penutupan dan tangkap pembolehubah yang diperlukan sahaja.
Apabila menggunakan pembolehubah dalam penutupan, pembolehubah yang ditangkap hendaklah diisytiharkan dengan jelas. Ini dicapai dengan menggunakan anotasi jenis eksplisit atau secara eksplisit menghantar pembolehubah ke penutupan.
Pembolehubah dalam penutup boleh merujuk skop luarnya, dan skop luar juga boleh merujuk penutupan. Ini boleh membawa kepada rujukan bulat dan dengan itu kebocoran memori. Elakkan penutupan merujuk skop luarnya, atau gunakan teknik pengumpulan sampah yang sesuai untuk memecahkan kitaran rujukan.
Mari kita lihat kes praktikal, di mana kita menggunakan penutupan untuk mengira jujukan Fibonacci.
package main import "fmt" func main() { // 定义一个斐波那契函数 fib := func(n int) int { if n < 2 { return n } // 捕获变量 a 和 b a, b := 0, 1 for i := 2; i <= n; i++ { a, b = b, a+b } return b } // 使用闭包计算斐波那契数 for i := 0; i <= 10; i++ { fmt.Printf("Fib(%d) = %d\n", i, fib(i)) } }
Dalam contoh ini, fungsi tanpa nama menangkap dua pembolehubah a
和 b
dan menggunakannya untuk mengira nombor Fibonacci melalui gelung.
Atas ialah kandungan terperinci Bagaimana untuk mereka bentuk penutupan fungsi golang yang baik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!