這是一個建立於
的文章,其中的資訊可能已經有所發展或是發生改變。
匿名函數不能夠獨立存在,但可以被賦值於某個變數,即儲存函數的地址到變數中:fplus := func(x, y int) int { return x + y },然後通過變數名對函數進行調用:fplus(3,4)。
當然,也可以直接對匿名函數進行調用:func(x, y int) int { return x + y } (3, 4)。
func() { sum = 0.0 for i := 1; i <= 1e6; i++ { sum += i }}()
表示參數列表的第一對括弧必須緊挨著關鍵字 func,因為匿名函數沒有名稱。花括弧 {} 涵蓋著函數體,最後的一對括弧表示對該匿名函數的調用。
使用defer結合匿名函數(閉包)修改方法傳回值:
package mainimport "fmt"func f() (ret int, str string) { defer func() { ret++ }() defer func() { str += ("##########") }() return 22, "111 "}func main() { fmt.Println(f()) }
列印輸出:
23 111 ##########
閉包執行個體:
package mainimport "fmt"func main() { var f = Adder() fmt.Print(f(1), " - ") fmt.Print(f(20), " - ") fmt.Print(f(300))}func Adder() func(int) int { var x int return func(delta int) int { x += delta return x }}
第一次調用Adder函數返回一個func(int) int函數,再次調用時局部變數x的值會被累加,最終輸出:
1 - 21 - 321