Penutupan ialah ciri dalam Golang yang membenarkan fungsi mengakses data di luar fungsi penciptaannya. Dengan membenamkan fungsi tanpa nama di dalam fungsi lain, kami boleh membuat penutupan. Penutupan sangat berguna dari segi penggunaan semula kod kerana ia membolehkan kami mencipta fungsi yang menjana kepingan dengan unsur jenis tertentu tanpa perlu menulis fungsi berasingan. Selain itu, penutupan memberikan faedah seperti pengkapsulan dan kebolehujian. . Ini membolehkan kami menggunakan semula kod tanpa menghantar data secara eksplisit kepada fungsi.
Syntax
Buat penutupan dengan hanya membenamkan fungsi tanpa nama di dalam fungsi lain:
func outerFunction() { a := 10 b := func() { fmt.Println(a) } b() }
b
berada di dalam outerFunction< Closure yang dibuat dalam /code>. Ia merujuk pembolehubah <code>a
, yang boleh diakses walaupun selepas outerFunction
kembali. Kes praktikal
Mari berikan contoh praktikal menggunakan penutupan untuk mencapai penggunaan semula kod. Kami ingin mencipta fungsi yang menjana hirisan dengan unsur jenis tertentu:func createSlice(elementFactory func() interface{}) []interface{} { s := []interface{}{} for i := 0; i < 5; i++ { s = append(s, elementFactory()) } return s }
createSlice
mengambil sebagai hujah fungsi tanpa nama yang digunakan untuk Mencipta elemen hirisan. Ini membolehkan kita dengan mudah membuat kepingan dengan unsur-unsur jenis yang berbeza tanpa perlu menulis fungsi berasingan. Sebagai contoh, kita boleh mencipta kepingan berikut: intSlice := createSlice(func() interface{} { return 1 }) stringSlice := createSlice(func() interface{} { return "hello" })
Kelebihan lainb
是在 outerFunction
中创建的闭包。它引用了变量 a
,即使在 outerFunction
返回后也能访问它。
实战案例
我们来举一个使用闭包实现代码重用的实际例子。我们想要创建一个函数,它可以生成一个带有特定类型的元素的切片:
rrreee在上面的代码中,createSlice
Selain penggunaan semula kod, penutupan juga memberikan kelebihan lain:
Enkapsulasi yang berkaitan:
Enkapsulasi yang berkaitan membolehkan kami membungkus kod entiti tunggal, modulariti dan kebolehselenggaraan dipertingkatkan.Atas ialah kandungan terperinci Peranan penutupan dalam penggunaan semula kod Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!