中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go 匿名函數與閉包的使用

發布時間:2020-07-08 20:36:32 來源:網絡 閱讀:345 作者:聽砜 欄目:編程語言

匿名函數: 沒有函數名的函數
基本概念
閉包是可以包含自由(未綁定到特定對象)變量的代碼塊,這些變量不在這個代碼塊內或者
任何全局上下文中定義,而是在定義代碼塊的環境中定義。要執行的代碼塊(由于自由變量包含
在代碼塊中,所以這些自由變量以及它們引用的對象沒有被釋放)為自由變量提供綁定的計算環
境(作用域)。
閉包的價值
閉包的價值在于可以作為函數對象或者匿名函數,對于類型系統而言,這意味著不僅要表示
數據還要表示代碼。支持閉包的多數語言都將函數作為第一級對象,就是說這些函數可以存儲到
變量中作為參數傳遞給其他函數,最重要的是能夠被函數動態創建和返回。

package main

import (
    "fmt"
)

func main() {

    a := 10
    str := "make"

    //匿名函數,沒有函數名字,函數定義,還沒有調用
    f1 := func() {
        fmt.Println("a=",a)
        fmt.Println("str=",str)
    }

    f1()

    // 給一個函數類型起別名
    type FuncType func()  // 函數沒有參數,沒有返回值

    // 聲明變量

    var f2 FuncType
    f2 = f1
    f2()

    //定義匿名函數,同時調用
    func() {
        fmt.Printf("a=%d,str=%s\n", a,str)
    }()  // 后面的()代表調用匿名函數

    // 帶參數的匿名函數
    f3 := func(i,j int) {
        fmt.Printf("i =%d, j=%d\n",i,j)
    }
    f3(1,2)

    //定義匿名函數,同時調用
    func(i, j int) {
        fmt.Printf("i=%d,j=%d\n", a,j)
    }(10,20)  // 后面的()代表調用匿名函數

    //匿名函數,有參數有返回值
    x,y := func(i, j int) (max, min int){
        if i > j{
            return i,j
        }else {
            return j,i
        }
    }(10,20)
    fmt.Println(x,y)

}

閉包

package main

import "fmt"

func test01() func() int {
    var x int  // 沒有初始化, 值為0

    return func() int {
        x++
        return x * x
    }
}

func test02() int {
    var x int
    x++
    return x *x
}

func main() {
    // 返回值為一個匿名函數,返回一個函數類型,通過f來調用返回的匿名函數
    // 它不關心這些捕獲了的變量和常量是否超出了作用域
    // 所以只要閉包還在使用它,這些變量就還會存在

    f := test01()
    fmt.Println(f())  //1
    fmt.Println(f())  //4
    fmt.Println(f())  //9
    fmt.Println(f())  //16

    // 用完就釋放了,每次調用還是1
    fmt.Println(test02())
    fmt.Println(test02())
    fmt.Println(test02())

}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

神农架林区| 云霄县| 英德市| 金乡县| 清水河县| 和平县| 左贡县| 永吉县| 容城县| 宁武县| 宝坻区| 孟州市| 绥芬河市| 鸡东县| 涟水县| 门源| 哈密市| 仲巴县| 文登市| 南涧| 望谟县| 清丰县| 南投市| 百色市| 读书| 闽清县| 宜君县| 泰州市| 崇州市| 额济纳旗| 南阳市| 巧家县| 平安县| 二连浩特市| 景洪市| 黑龙江省| 名山县| 彝良县| 肇庆市| 柳江县| 珠海市|