Go語言之函式使用 8 閉包

2021-08-22 16:31:10 字數 1492 閱讀 1423

閉包就是乙個函式和與其相關的引用環境組合的乙個整體(實體)

package main

import

"fmt"

func addupper(str string) func (int) int

}func main()

案例分析:

1)addupper會返回乙個匿名函式

func(x int) int
2)該匿名函式引用到其函式外部乙個變n

var n int =10

return

func(x int) int

3)你匿名函式和它引用到的外部變數n,形成乙個整體,構成乙個閉包。

4)f(1) , f(2) …即在反覆呼叫閉包。

5)當我們使用閉包時,該匿名函式引用到外部n, 只會被初始化一次,以後呼叫時,則使用同一n.。

6)你可以這樣理解,把閉包看成乙個類,匿名函式就相當於方法,而引用到的外部變數就是字段。

7)搞清楚閉包的關鍵點,就是分析出,該匿名函式引用到外部變數是哪些。

1、請編寫乙個程式,具體要求如下

1) 編寫乙個函式 makesuffix(suffix string) 可以接收乙個檔案字尾名(比如.jpg),並返回乙個閉包

2) 呼叫閉包,可以傳入乙個檔名,如果該檔名沒有指定的字尾(比如.jpg) ,則返回 檔名.jpg , 如果已經有.jpg字尾,則返回原檔名。

3) 要求使用閉包的方式完成

4) strings.hassuffix

2、**說明

1) 返回的匿名函式和 makesuffix (suffix string) 的 suffix 變數 組合成乙個閉包,因為 返回的函式引用到suffix這個變數

2) 我們體會一下閉包的好處,如果使用傳統的方法,也可以輕鬆實現這個功能,但是傳統方法需要每次都傳入 字尾名,比如 .jpg ,而閉包因為可以保留上次引用的某個值,所以我們傳入一次就可以反覆使用。大家可以仔細的體會一把!

package utils

import (

"strings")/*

1)編寫乙個函式 makesuffix(suffix string) 可以接收乙個檔案字尾名(比如.jpg),並返回乙個閉

2)呼叫閉包,可以傳入乙個檔名,如果該檔名沒有指定的字尾(比如.jpg) ,則返回 檔名.jpg , 如果已經有.jpg字尾,則返回原檔名。

3)要求使用閉包的方式完成

4)strings.hassuffix //提示會使用到函式

*/// 使用閉包

func makesuffix1(suffix string) func(string) string else

}}// 傳統方式

func makesuffix2(suffix string, str string) string else

}

Go語言之旅 閉包

閉包是在詞法上下文中引用了自由變數的函式,這種說法可能太過學術化了,很難理解。用通俗的話來說,閉包相當於在乙個函式中,去捕獲自由變數 在函式外部定義但在函式內被引用的變數 當脫離了捕獲該自由變數的上下文,依舊可以使用該自由變數。我們來看乙個例子 func test x int func func m...

Go語言 閉包

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

Go語言的函式06 閉包函式

package main import fmt 李逵和武松的study方法的邏輯是幾乎一模一樣的 然而為了分別儲存兩人的學習進度,需要開闢兩個全域性變數,函式內部的需要使用兩條分支結構才能完成業務邏輯 如果是108將都來學習。此時 的可復用性很差 var progress int func stud...