什么是闭包
“一等公民”意味着函数可以像普通的类型(整型、字符串等)一样进行赋值、作为函数的参数传递、作为函数的返回值等。Golang的函数只能返回匿名函数!
示例:
var f = func(int) {}
func main() {
f = func(i int) {
fmt.Println(i)
}
f(2)
f = func(i int) {
fmt.Println(i * i * i)
}
f(2)
}
/*
输出:
2
8
*/
闭包陷阱
func main(){
for i :=0;i<3;i++{
go func(){
fmt.Println(i) //函数内引用函数外部的变量,使外部变量的生命周期延长了
}()
}
}
执行结果:
3
3
3
正确的方式是向匿名函数中传递参数
func main(){
for i :=0;i<3;i++{
go func(i int){
fmt.Println(i) //函数内引用函数外部的变量,使外部变量的生命周期延长了
}(i)
}
}
文档更新时间: 2021-08-21 14:26 作者:张尚