- 函数+引用环境=闭包
- go语言中闭包指引用了外部变量的匿名函数
示例1:
// 准备一个字符串
str := "sport"
// 创建匿名函数
f := func(){
//给str一个新值,此时匿名函数引用了外部变量,形成了闭包
str := "study"
fmt.Println(str)
}
f() //执行闭包
示例2:
func add()func()int{ //定义一个函数,返回值是匿名函数
sum := 0
num := 1
return func()int{
sum=sum+num //返回值匿名函数中引用了匿名函数外部的变量sum和num,形成闭包
return sum
}
}
a := add() //执行add函数,将返回的匿名函数当作值赋给a
fmt.Println(a()) //执行a即执行匿名函数
示例3:
func mSuffix(suffix string)func(string)string{ // 定义函数mSuffix,返回值为匿名函数
return func(name string)string{ // 返回匿名函数
if !strings.HasSuffix(name,suffix){ // 判断name是否以suffix结尾,此处引用了匿名函数外部变量suffix
return name + suffix
}
return name
}
}
jpgFunc := mSuffix(".jpg")
fmt.Println(jpcFunc("test"))