Go 閉包和匿名函式講解

2022-03-14 05:22:37 字數 1972 閱讀 6442

**函式及多型

1

package main23

import

"fmt"4

5 //給匿名函式型別取別名

6 //注意不要在後面加{},加了是表面匿名函式定義

7type functype func(x int, y int) int

89 //例如實現加法

10func add(x int, y int) int

1415 //例如實現減法

16func sub(x int, y int) int

2021 //例如實現乘法

22func mul(x int, y int) int

2627 //例如實現除法

28func div(x int, y int) int

3233 //**函式,函式有乙個引數是函式型別, 這個函式就是**函式

34 //多型,多種形態,呼叫同乙個介面,不同的表現,可以實現不同表現,例如:加減乘除

35 //先有想法,後面再實現功能

36func callback(a, b int, ftest functype) int

4243

func main()

view code

閉包:

乙個函式捕獲了和它在同一作用域的其它常量和變數。

匿名函式和閉包

1

package main23

import

"fmt"4

5func main()

14f()

15 //給乙個函式型別起別名

16 type functype func() //函式沒有引數,沒有返回值

17 //宣告變數

18 // f1 :=f

19var f1 functype

20 f1 =f

21f1()

2223 //需求:定義匿名函式,同時呼叫

24func() () //後面的()代表呼叫此匿名函式

2728 //需求:帶引數的匿名函式

29 f2 :=func(i, j int)

32 f2(1, 2)

3334

func(i, j int) (10, 20)

3738 //需求:匿名函式,帶引數帶返回值

39 x, y :=func(a, b int) (max, min int) else

47return

48 }(2, 4)

49 fmt.printf("

x=%d, y=%d

", x, y)

50 }

view code

閉包捕獲外部變數的特點

1

package main23

import

"fmt"4

5func main() () //()代表直接呼叫

14 fmt.printf("

外部:a=%d, str=%s\n

", a, str)

15 }

view code

閉包呼叫區域性變數,與普通呼叫函式時區域性變數的區別

1

package main23

import

"fmt"4

5func test() func() int 12}

13func main()

2324

func test01() int

2930

func main01()

view code

go閉包和匿名函式

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

go 匿名函式和閉包

1.函式也是一種型別,因此可以定義作為乙個函式型別的變數 package main import fmt 函式作為引數 func add a,b int int func testfunc a,b int,fun func int,int int int func main 2.匿名函式即沒有名字的...

匿名函式和閉包

匿名函式 匿名函式和普通函式 function box alert box 閉包概念 閉包是指有權訪問另乙個函式作用域中的變數的函式,建立閉包的常見的方式,就是在乙個函式內部建立另乙個函式,通過另乙個函式訪問這個函式的區域性變數。閉包作用 使用閉包有乙個優點,也是其缺點。可以把區域性變數駐留在記憶體...