Go中的閉包

2021-09-22 13:09:41 字數 611 閱讀 2217

閉包是很多語言必備的功能了,golang也不例外。

先看下面的這個例子:

package main

import "fmt"

func adder() func(int) int

}func main()

}

執行返回結果:

0 0

1 -2

3 -6

6 -12

10 -20

15 -30

21 -42

28 -56

36 -72

45 -90

這個就是go中的閉包,乙個函式和與其相關的引用環境組合而成的實體。

關於閉包的概念《閉包的概念、形式和應用》一文已經說的很清楚了。

個人理解: 

其實理解閉包的最方便的方法就是將閉包函式看成乙個類,乙個閉包函式呼叫就是例項化乙個類。

然後就可以根據類的角度看出哪些是「全域性變數」,哪些是「區域性變數」了。

比如上例中的adder函式返回func(int) int 的函式

pos和neg分別例項化了兩個「閉包類」,在這個「閉包類」中有個「閉包全域性變數」sum。所以這樣就很好理解返回的結果了。

Go中的閉包

閉包是很多語言必備的功能了,golang也不例外。先看下面的這個例子 package main import fmt func adder func int int func main 執行返回結果 0 0 1 2 3 6 6 12 10 20 15 30 21 42 28 56 36 72 45 ...

Go中的閉包

閉包的概念 是可以包含自由 未繫結到特定物件 變數的 塊,這些變數不在這個 塊內或者任何全域性上下文中定義,而是在定義 塊的環境中定義。要執行的 塊 由於自由變數包含在 塊中,所以這些自由變數以及它們引用的物件沒有被釋放 為自由變數提供繫結的計算環境 作用域 閉包的價值 閉包的價值在於可以作為函式物...

Go語言 閉包

使用閉包實現乙個小功能。判斷給定的檔名是否帶有字尾,如果有指定字尾就直接輸出,如果不帶字尾就新增字尾後,輸出檔名 package main import fmt strings func makesuffix suffix string func string string return name ...