go的匿名函數


1、go的匿名函數,

//匿名函數,就是函數不帶函數名字呢!func(int)(int)
//閉包通過匿名函數實現
func OFFBag() {
    a, str := 10, "閉包"

    //匿名函數定義,形成一個閉包,函數里面可以使用變量a和Str
    f1 := func() { //自動推導
        fmt.Println("a= ", a)
        fmt.Println("str= ", str)
    }

    //調用f1()
    f1()

    //第二種調用方式,少用
    type FuncType func() //定義函數類型
    var f2 FuncType = f1 //聲明變量
    f2()

    //第三種調用方式,聲明同時調用
    func() { //自動推導
        fmt.Println("a= ", a)
        fmt.Println("str= ", str)
    }() //圓括號代表調用匿名函數

    //帶參數的匿名函數
    func(i, j int32) { //自動推導
        fmt.Println("i= ", i)
        fmt.Println("j= ", j)
    }(10, 20) //圓括號代表調用匿名函數

    //有參數有返回值的匿名函數
    max, _ := func(i, j int32) (max, min int32) { //自動推導
        if i > j {
            return i, j
        }
        return j, i
    }(10, 20) //圓括號代表調用匿名函數

    fmt.Println("max= ", max)
}

2、閉包捕獲外部變量,他不關心這些捕獲的變量或常量是否超出作用域,所以只有閉包還在使用這些變量就會存在

func main() {
    //聲明並賦值變量
    str := "閉包的特點"

    fmt.Println("", str)
    f := test1()
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())
    fmt.Println(f())

}

//函數的返回值是一個匿名函數,返回一個函數類型
func test1() func() int32 {
    var x int32
    return func() int32 {
        x++
        return x * x
    }
輸出結果:用來初始化一些全局變量

3、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM