Penunjuk fungsi digunakan dalam Go untuk panggil balik fungsi, pelaksanaan tertunda dan polimorfisme. Penutupan digunakan untuk pengurusan negeri, pengendalian acara dan pemulaan malas.
Senario aplikasi penunjuk fungsi dan penutupan dalam Go
Penunjuk fungsi
Penunjuk fungsi ialah pembolehubah yang menunjuk kepada fungsi. Anda boleh menggunakan kata kunci func
untuk mengisytiharkan jenis penunjuk fungsi: func
关键字声明函数指针类型:
type Fn func(int) int
函数指针可以作为参数传递给其他函数:
func apply(fn Fn, arg int) int { return fn(arg) }
闭包
闭包是引用了外部函数作用域中变量的函数。可以通过在函数中定义嵌套函数来创建闭包:
func counter() func() int { i := 0 return func() int { i++ return i } }
应用场景
函数指针
实战案例:使用函数指针进行排序
type Person struct { Name string Age int } type ByName []Person func (a ByName) Len() int { return len(a) } func (a ByName) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByName) Less(i, j int) bool { return a[i].Name < a[j].Name } type ByAge []Person func (a ByAge) Len() int { return len(a) } func (a ByAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age } func main() { people := []Person{ {Name: "Alice", Age: 30}, {Name: "Bob", Age: 25}, {Name: "Charlie", Age: 35}, } sort.Sort(ByName(people)) fmt.Println(people) // [{Name: Alice Age: 30} {Name: Bob Age: 25} {Name: Charlie Age: 35}] sort.Sort(ByAge(people)) fmt.Println(people) // [{Name: Bob Age: 25} {Name: Alice Age: 30} {Name: Charlie Age: 35}] }
在这个案例中,函数指针 ByName
和 ByAge
指定了对 Person
切片的不同排序标准。
闭包
实战案例:使用闭包实现计数器
func main() { getCount := counter() fmt.Println(getCount()) // 1 fmt.Println(getCount()) // 2 fmt.Println(getCount()) // 3 }
在这个案例中,闭包 getCount
保存了内部计数器变量 i
rrreee
getCount
menyimpan pembolehubah pembilang dalaman i
, dan mengembalikan nilai pertambahan pada setiap panggilan. 🎜Atas ialah kandungan terperinci Senario aplikasi penunjuk fungsi dan penutupan di Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!