Go中的閉包

2021-10-23 17:42:44 字數 1521 閱讀 2931

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

閉包的價值 : 閉包的價值在於可以作為函式物件或者匿名函式,對於型別系統而言,這意味著不僅要表示資料還要表示**。支援閉包的多數語言都將函式作為第一級物件,就是說這些函式可以儲存到變數中作為引數傳遞給其他函式,最重要的是能夠被函式動態建立和返回。

go語言中的閉包同樣也會引用到函式外的變數。閉包的實現確保只要閉包還被使用,那麼被閉包引用的變數會一直存在。

以上關於閉包的概念摘錄自許式偉 的《go語言程式設計》

**示例:

package main

import

("fmt"

"strings"

"time"

)/* 定義乙個簡單的閉包 */

func

addr()

func

(int

)int

}func

testclosureaddr()

/* 使用閉包使用函式引數變數 */

func

add(base int

)func

(int

)int

}func

testclosureadd()

/* 定義乙個增加檔案字尾名的閉包函式 */

func

makesuffix

(suffix string

)func

(string

)string

return name + suffix }}

func

testmakesuffix()

/* 定義多個閉包處理函式 */

func

manyclosurefunc

(base int)(

func

(int

)int

,func

(int

)int

) sub :=

func

(i int

)int

return add, sub

}func

testmanyclosurefunc()

/* 使用匿名函式處理:go func(){} () */

func

closureanonymous()

(i) time.

sleep

(time.second)}}

func

main()

當你的所擁有的知識撐不起你的野心的時候,你只能靜下心去努力學習! when your knowledge does not support your ambition, you can only calm down and study hard!

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中的閉包

閉包是很多語言必備的功能了,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語言 閉包

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