代码
https://github.com/fangkang7/goLearn
案例
先来看一个闭包的案例
解释一下为什么要这样写。
跟这代码来,一开是我们定义了一个string的切片
然后我们想随着索引的增加来获取不同的切片值
那么就需要定义很多个全局变量来操作
那么改为闭包的写法后就只需要写一个闭包函数然后就可以在任意地方使用
闭包就是返回函数的函数
我们可以看到闭包的使用,注意我圈起来的这几个地方就行
使用时的注意点,在使用闭包时,需要先把闭包赋值。然后用这个值()这样的写法来使用
代码
package main
import "fmt"
var hero = []string{"关羽", "张飞", "赵云", "马超", "黄忠"}
func main() {
nextHero1 := NextHere1()
for i := 0; i < 7; i++ {
// 关羽 张飞 赵云 马超 黄忠 关羽 张飞
fmt.Println(nextHero1())
}
}
/**
闭包函数:返回函数的函数
*/
func NextHere1() func() string {
var index int
f := func() string {
// 获取到对应的值
hero := hero[index]
// 每次加1
index++
// 判断当索引大于4的时候把索引的初始值在改为0
if index > 4 {
index = 0
}
return hero
}
return f
}
针对于闭包,也可以使用指针来实现。但是闭包也不是很难大家尽量理解