前言
闭包这个名词大家应该都听说过,特别是对于写过前端的小伙伴们,那么到底什么是闭包呢?在维基百科中的定义是这样说明的:
在计算机科学中,闭包,又称词法闭包或函数闭包,是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数和一个关联的环境。环境里是若干对符号和值的对应关系,它既要包括约束变量,也要包括自由变量,有些函数也可能没有自由变量。
那么本次我们就来一起探索一下go语言中的闭包基础用法。
定义
在go语言中闭包是如何使用的呢?一个简单的示例:
func AppendSign(sign string) func(c string) string {
return func(c string) string {
return c + sign
}
}
上述代码中,调用AppendSign会返回一个func(c string) string{}的匿名函数(实际上是返回的此匿名函数的地址),然后调其返回的匿名函数,则会将传入AppendSign的签名附带在其后返回回来,实际调用运行为:
func main() {
s := AppendSign(" - From JueJin")
fmt.Println(s("Golang"))
fmt.Println(s("Java"))
fmt.Println(s("Python"))
}
输出结果:
Golang - From JueJin
Java - From JueJin
Python - From JueJin
当然,你还可以返回多个闭包,例如:
func AppendManySign(sign string, sing2 string) (f1 func(c string) string, f2 func(c string) string) {
f1 = func(c string) string {
return c + sign
}
f2 = func(c string) string {
return c + sing2
}
return
}
func main() {
f1, f2 := AppendManySign(" - From JueJin", " - From 掘金")
fmt.Println(f1("Golang"))
fmt.Println(f2("Golang"))
}
输出结果:
Golang - From JueJin
Golang - From 掘金
后记
在实际的开发中,会有很多地方用到闭包,例如模块开发中有些业务需要异步等待调用,则可以直接返回闭包供给调用方控制。
最后,感谢您的阅读,谢谢!