Go/函式/匿名函式-閉包
阿新 • • 發佈:2018-11-16
## 匿名函式作為一個閉包,閉包以引用傳遞的方式捕獲外部變數
package main import "fmt" func test(){ a := 22 str := "go" //匿名函式,閉包 以引用傳遞方式捕獲外部變數 func(){ a = 23 str = "gogo" fmt.Println(a,str) }() //直接呼叫匿名函式 fmt.Println(a,str) } func main() { a := 33 //定義匿名函式 f1 := func(){ fmt.Printf("訪問匿名函式作用域之外的變數//閉包//,a=%d \n",a); } f1() //呼叫匿名函式 type FuncType func () var f2 FuncType = f1 f2() //定義並直接呼叫匿名函式 func(){ fmt.Printf("訪問匿名函式作用域之外的變數//閉包//,a=%d \n",a); }() x,y := func (i,j int) (c,d int){ c = i+a d = j+a return }(1,2) fmt.Println(x,y) test() }
## 閉包可以作為函式返回值 閉包離開作用域,其捕獲的外部變數才會銷燬
package main import "fmt" //返回值為匿名函式 func test() func () int { var i int //預設值0 return func() int{ i++ return i*i } } func main() { f := test() //f為一個匿名函式 fmt.Println(f()) //1*1 fmt.Println(f()) //2*2 fmt.Println(f()) //3*3 //只有閉包f離開作用域main,其捕獲的變數i才會銷燬 }