• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

go:匿名函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1. 简介

  当不想给函数命名时,可以使用匿名函数,匿名函数不能独立存在,必须将匿名函数赋值给某个变量,然后通过这个变量调用对应的匿名函数;

  示例:

func main() {

    fpx:= func(x,y int)(z int) {
        return x+y
    }
    fmt.Println(fpx(1,2))
}

  输出结果:3

2. 将匿名函数作为返回值

2.1 普通匿名函数

func main() {

    fpx:=Add2() // 返回 Add2() 中 return 的函数,即 b +2 
    z := fpx(1) // 将 1 传入函数,即 1 + 2 = 3
    fmt.Println(z)
}

func Add2() func(b int) int {
    return func(b int) int {
        return b + 2
    }
}

2.2  匿名函数引用外部函数变量

  引用闭包时,在这个引用的生命周期内,程序会存储闭包中引用的外部函数变量(此时该变量类似于全局变量),直到闭包的生命周期结束。

func main() {

    // 引用闭包时,在这个引用的生命周期内,程序会存储闭包中引用的外部函数变量(此时该变量类似于全局变量)
    aa := append("q")
    fmt.Println(aa("w"))
    fmt.Println(aa("e"))
    fmt.Println(aa("r"))
}

func append(a string) func(b string) string {
    var s = a
    return func(b string) string {
        s = s + b
        return s
    }
}

输出结果:

 

 2.3 工厂函数

  如果需要创建较多功能类似的函数时,可以通过闭包的形式创建一个工厂函数;

  示例:创建一个给文件名添加不同后缀的工厂函数

func main() {

    suffixTxt := makeAppendSuffix("txt")
    fmt.Println(suffixTxt("a"))
    fmt.Println(suffixTxt("b"))
    suffixMp4 := makeAppendSuffix("mp4")
    fmt.Println(suffixMp4("xx"))
    fmt.Println(suffixMp4("zz"))

}

func makeAppendSuffix(suffix string) func(name string) (totalName string) {
    return func(name string)(totalName string) {
        return name + "." + suffix
    }
}

输出结果:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go 开发者进阶周刊(Dec 3rd)发布时间:2022-07-10
下一篇:
Go语言的成功也预示着Rust的成功【转】发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap