查看: 42|回复: 0

go的匿名函数

[复制链接]

1

主题

1

回帖

0

积分

热心网友

金币
1
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2008-11-20
发表于 2020-4-1 15:23:00 | 显示全部楼层 |阅读模式

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、

 



来源:https://www.cnblogs.com/oceanran/p/12612878.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部