目錄
總體思想為:在函式內部定義區域性變數,把另乙個函式當作返回值,區域性變數對於返回值函式相當於全部變數,所以多次呼叫返回值函式區域性變數的值跟隨變化。
// closure.go
package main程式設計客棧
import (
"fmt"
"strings"
)func main()
func closure(prefix, suffix string) func(url string) string
if !strings.hassuffix(url, suf)
return url
}}$ go run closure.go
func(string) string 0x493560
0xc0000301d0 0xc0000301e0
0xc0000301d0 0xc0000301e0
0xc0000301d0 0xc0000301e0
func(string) string 0x493560
0xc0000302d0 0xc0000302e0
0xc0000302d0 0xc0000302e0
0xc0jsaudirm000302d0 0xc0000302e0
第 2 行 返回的是變數f函式的型別和位址,函式在go 語言中是引用型別。如果學過j**a語言就知道,j**a物件的記憶體空間有棧、堆、方法區、靜態區。
第 3 - 5 行返回的是presuf兩個變數的位址,每一次呼叫是presuf位址都是不變的。
第 6 - 9 行這是新宣告的f1變數,這時候presuf的位址和上一次f的裡面的presuf位址是不一樣的。
因為我們建立引用型別的變數時,其實只是乙個標頭值,標頭值裡包含乙個指標,指標指向底層的資料,它所指向的底層結構沒有被複製傳遞,這也引用型別比值型別傳遞更高效的原因。
Go語言 閉包
使用閉包實現乙個小功能。判斷給定的檔名是否帶有字尾,如果有指定字尾就直接輸出,如果不帶字尾就新增字尾後,輸出檔名 package main import fmt strings func makesuffix suffix string func string string return name ...
go語言中閉包
閉包 closure 在一些語言中,在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在乙個函式與一組 私有 變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。golang的閉包 函式在golang中是 一等公民 ...
GO語言中的閉包
package main import fmt import fmt func main r res fmt.println r 1 r2 res fmt.println r2 2 r3 res fmt.println r3 3 乙個外層函式中有內層函式,該內層函式中,會操作外層函式的區域性變數 外...