go語(yǔ)法入門(mén)匿名函數(shù)定義及使用示例詳解
一、介紹
Go語(yǔ)言支持匿名函數(shù),即在需要使用函數(shù)時(shí)再定義函數(shù),匿名函數(shù)沒(méi)有函數(shù)名只有函數(shù)體,函數(shù)可以作為一種類(lèi)型被賦值給函數(shù)類(lèi)型的變量,匿名函數(shù)也往往以變量方式傳遞,這與C語(yǔ)言的回調(diào)函數(shù)比較類(lèi)似,不同的是,Go語(yǔ)言支持隨時(shí)在代碼里定義匿名函數(shù)。
匿名函數(shù)是指不需要定義函數(shù)名的一種函數(shù)實(shí)現(xiàn)方式,由一個(gè)不帶函數(shù)名的函數(shù)聲明和函數(shù)體組成,下面來(lái)具體介紹一下匿名函數(shù)的定義及使用。
1.1 定義 匿名函數(shù)
fun(參數(shù))返回{ 函數(shù)體 }
匿名函數(shù)的定義就是沒(méi)有名字的普通函數(shù)定義。
1.2 定義 匿名函數(shù)的兩種方式
匿名函數(shù)因?yàn)闆](méi)有函數(shù)名,所以沒(méi)辦法像普通函數(shù)那樣調(diào)用,所以匿名函數(shù)需要保存到某個(gè)變量或者作為立即執(zhí)行函數(shù):
- 保存到某個(gè)變量
- 立即執(zhí)行函數(shù)
package main import "fmt" func main() { // 定義匿名函數(shù)方式一 add := func (x, y int) { fmt.Println(x + y) } add(1, 2) // 通過(guò)變量調(diào)用匿名函數(shù) // 定義匿名函數(shù)方式二 func (x, y int) { fmt.Println(x - y) }(20, 5) //自執(zhí)行函數(shù):匿名函數(shù)定義完加()直接執(zhí)行 }
1.3 匿名函數(shù)的兩種場(chǎng)景(回調(diào)函數(shù),閉包)
1.3.1 回調(diào)函數(shù)
func callFunc(base int, f func(int, int) int) { num := f(base, 5) // 減少或者加上5 fmt.Printf("base %d 經(jīng)過(guò)f處理后值是:%d \n", base, num) } func TestCallFunc(t *testing.T) { addNum := func(base, num int) int { return base + num } callFunc(100, addNum) }
輸出:
=== RUN TestCallFunc
base 100 經(jīng)過(guò)f處理后值是:105
--- PASS: TestCallFunc (0.00s)
1.3.2 閉包
func TestClosure(t *testing.T) { var j int = 1 f := func() { var i int = 1 fmt.Printf("i, j: %d, %d\n", i, j) } f() j += 2 f() }
輸出:
=== RUN TestClosure
i, j: 1, 1
i, j: 1, 3
--- PASS: TestClosure (0.00s)
在上面的示例中,匿名函數(shù)引用了外部變量,所以同時(shí)也是個(gè)閉包,變量 f 指向的閉包引用了局部變量 i 和 j,i 在閉包內(nèi)部定義,其值被隔離,不能從外部修改,而變量 j 在閉包外部定義,所以可以從外部修改,閉包持有的只是其引用。
以上就是go語(yǔ)法入門(mén)匿名函數(shù)定義及使用示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go語(yǔ)法入門(mén)匿名函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解Go語(yǔ)言如何利用高階函數(shù)寫(xiě)出優(yōu)雅的代碼
- Go語(yǔ)言遞歸函數(shù)的具體實(shí)現(xiàn)
- go語(yǔ)言編程實(shí)現(xiàn)遞歸函數(shù)示例詳解
- 如何在Go語(yǔ)言中靈活運(yùn)用匿名函數(shù)和閉包
- 一文帶你了解Go語(yǔ)言中的匿名函數(shù)
- Go語(yǔ)言中init函數(shù)與匿名函數(shù)使用淺析
- 詳解golang?defer?閉包?匿名函數(shù)
- go語(yǔ)言中匿名函數(shù)的作用域陷阱詳解
- 秒懂Golang匿名函數(shù)
- go語(yǔ)言匿名函數(shù)的使用
- Go函數(shù)使用(函數(shù)定義、函數(shù)聲明、函數(shù)調(diào)用等)
相關(guān)文章
Go語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)介紹
在本篇文章里小編給大家整理的是一篇關(guān)于Go語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)介紹內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07

Golang如何實(shí)現(xiàn)任意進(jìn)制轉(zhuǎn)換的方法示例

Go Gin實(shí)現(xiàn)文件上傳下載的示例代碼

Golang算法之田忌賽馬問(wèn)題實(shí)現(xiàn)方法分析

Windows10系統(tǒng)下安裝Go環(huán)境詳細(xì)步驟

詳解Go語(yǔ)言中切片的長(zhǎng)度與容量的區(qū)別