亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    go語言的匿名函數(shù)定義方法是什么

    go語言的匿名函數(shù)定義方法是“func(參數(shù)列表)(返回參數(shù)列表){函數(shù)體}”,其實匿名函數(shù)的定義就是沒有名字的普通函數(shù)定義。匿名函數(shù)完全可以當(dāng)作一個類型,可以直接賦值,可以賦值給變量,可以當(dāng)作實參或者返回值進(jìn)行使用,當(dāng)然也可以直接進(jìn)行調(diào)用。

    go語言的匿名函數(shù)定義方法是什么

    本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

    Go語言支持匿名函數(shù),即在需要使用函數(shù)時再定義函數(shù),匿名函數(shù)沒有函數(shù)名只有函數(shù)體,函數(shù)可以作為一種類型被賦值給函數(shù)類型的變量,匿名函數(shù)也往往以變量方式傳遞,這與C語言的回調(diào)函數(shù)比較類似,不同的是,Go語言支持隨時在代碼里定義匿名函數(shù)。

    匿名函數(shù)是指不需要定義函數(shù)名的一種函數(shù)實現(xiàn)方式,由一個不帶函數(shù)名的函數(shù)聲明和函數(shù)體組成,下面來介紹一下匿名函數(shù)的定義方法。

    定義一個匿名函數(shù)

    匿名函數(shù)的定義格式如下:

    func(參數(shù)列表)(返回參數(shù)列表){     函數(shù)體 }
    登錄后復(fù)制

    匿名函數(shù)的定義就是沒有名字的普通函數(shù)定義。

    基本使用方法

    匿名函數(shù)完全可以當(dāng)作一個類型,可以直接賦值,可以賦值給變量,可以當(dāng)作實參或者返回值進(jìn)行使用,當(dāng)然也可以直接進(jìn)行調(diào)用

    1) 在定義時調(diào)用匿名函數(shù)

    匿名函數(shù)可以在聲明后調(diào)用,例如:

    func(data int) {     fmt.Println("hello", data) }(100)
    登錄后復(fù)制

    注意第3行}后的(100),表示對匿名函數(shù)進(jìn)行調(diào)用,傳遞參數(shù)為 100。

    2) 將匿名函數(shù)賦值給變量

    匿名函數(shù)可以被賦值,例如:

    // 將匿名函數(shù)體保存到f()中 f := func(data int) {     fmt.Println("hello", data) } // 使用f()調(diào)用 f(100)
    登錄后復(fù)制

    匿名函數(shù)的用途非常廣泛,它本身就是一種值,可以方便地保存在各種容器中實現(xiàn)回調(diào)函數(shù)和操作封裝。

    匿名函數(shù)的使用地方

    回調(diào)函數(shù)

    為啥要用回調(diào)函數(shù)呢,我們分析一下,A是主函數(shù),B作為參數(shù)傳遞給主函數(shù),我們可以通過上面的例子看到,我們在定義主函數(shù)的時候,只定義了函數(shù)B的參數(shù)以及返回值類型,那么只要函數(shù)B滿足我們定義的類型,函數(shù)A都可以處理,所以說使用回調(diào)函數(shù)可以讓我們主函數(shù)的通用性更強(qiáng)。在通俗點來說,主函數(shù)提供了一個接口,只要符合這個接口規(guī)則的函數(shù)都能用。

    type Callback func(a, b int) int  // 提供接口,外部隨便怎么搞,只要符合規(guī)則就行 func api(x,y int, callback Callback) int {     return callback(x, y) }  // 回調(diào)函數(shù),只要滿足傳入?yún)?shù)類型為int // 并且返回值類型也是int就都可以 func add(a, b int) int {     return a + b }
    登錄后復(fù)制

    閉包

    閉包是啥,閉包是由函數(shù)和與其相關(guān)的引用環(huán)境組合而成的實體。

    func add() func(int) int {     var b int     return func(a int) int {         b = b + a         return b     } }  var f = add()
    登錄后復(fù)制

    這里f就是一個閉包,f保存了對b的引用,簡單來說f里面有個指針指向b的地址,所以說我們可以得到以下結(jié)果

    fmt.Println(f(1)) // 由于b初始化為0,所以輸出1 fmt.Println(f(2)) // 由于上一行代碼已經(jīng)修改了b的值,所以輸出4
    登錄后復(fù)制

    所以說閉包就是相當(dāng)于在我們函數(shù)內(nèi)部使用匿名函數(shù)處理好有關(guān)變量的所有事情

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號