首頁  >  文章  >  後端開發  >  go語言的匿名函式定義方法是什麼

go語言的匿名函式定義方法是什麼

青灯夜游
青灯夜游原創
2023-01-06 19:37:133769瀏覽

go語言的匿名函數定義方法是“func(參數列表)(返回參數列表){函數體}”,其實匿名函數的定義就是沒有名字的普通函數定義。匿名函數完全可以當作一個類型,可以直接賦值,可以賦值給變量,可以當作實參或傳回值來使用,當然也可以直接進行呼叫。

go語言的匿名函式定義方法是什麼

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

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語言的匿名函式定義方法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn