您好,登錄后才能下訂單哦!
這篇文章主要講解了“go語言的匿名函數如何定義”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“go語言的匿名函數如何定義”吧!
go語言的匿名函數定義方法是“func(參數列表)(返回參數列表){函數體}”,其實匿名函數的定義就是沒有名字的普通函數定義。匿名函數完全可以當作一個類型,可以直接賦值,可以賦值給變量,可以當作實參或者返回值進行使用,當然也可以直接進行調用。
Go語言支持匿名函數,即在需要使用函數時再定義函數,匿名函數沒有函數名只有函數體,函數可以作為一種類型被賦值給函數類型的變量,匿名函數也往往以變量方式傳遞,這與C語言的回調函數比較類似,不同的是,Go語言支持隨時在代碼里定義匿名函數。
匿名函數是指不需要定義函數名的一種函數實現方式,由一個不帶函數名的函數聲明和函數體組成,下面來介紹一下匿名函數的定義方法。
定義一個匿名函數
匿名函數的定義格式如下:
func(參數列表)(返回參數列表){
函數體
}
匿名函數的定義就是沒有名字的普通函數定義。
基本使用方法
匿名函數完全可以當作一個類型,可以直接賦值,可以賦值給變量,可以當作實參或者返回值進行使用,當然也可以直接進行調用
1) 在定義時調用匿名函數
匿名函數可以在聲明后調用,例如:
func(data int) {
fmt.Println("hello", data)
}(100)
注意第3行}后的(100),表示對匿名函數進行調用,傳遞參數為 100。
2) 將匿名函數賦值給變量
匿名函數可以被賦值,例如:
// 將匿名函數體保存到f()中
f := func(data int) {
fmt.Println("hello", data)
}
// 使用f()調用
f(100)
匿名函數的用途非常廣泛,它本身就是一種值,可以方便地保存在各種容器中實現回調函數和操作封裝。
匿名函數的使用地方
回調函數
為啥要用回調函數呢,我們分析一下,A是主函數,B作為參數傳遞給主函數,我們可以通過上面的例子看到,我們在定義主函數的時候,只定義了函數B的參數以及返回值類型,那么只要函數B滿足我們定義的類型,函數A都可以處理,所以說使用回調函數可以讓我們主函數的通用性更強。在通俗點來說,主函數提供了一個接口,只要符合這個接口規則的函數都能用。
type Callback func(a, b int) int
// 提供接口,外部隨便怎么搞,只要符合規則就行
func api(x,y int, callback Callback) int {
return callback(x, y)
}
// 回調函數,只要滿足傳入參數類型為int
// 并且返回值類型也是int就都可以
func add(a, b int) int {
return a + b
}
閉包
閉包是啥,閉包是由函數和與其相關的引用環境組合而成的實體。
func add() func(int) int {
var b int
return func(a int) int {
b = b + a
return b
}
}
var f = add()
這里f就是一個閉包,f保存了對b的引用,簡單來說f里面有個指針指向b的地址,所以說我們可以得到以下結果
fmt.Println(f(1)) // 由于b初始化為0,所以輸出1
fmt.Println(f(2)) // 由于上一行代碼已經修改了b的值,所以輸出4
所以說閉包就是相當于在我們函數內部使用匿名函數處理好有關變量的所有事情。
感謝各位的閱讀,以上就是“go語言的匿名函數如何定義”的內容了,經過本文的學習后,相信大家對go語言的匿名函數如何定義這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。