前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言的匿名函数

go语言的匿名函数

作者头像
李海彬
发布2018-07-26 10:00:50
4280
发布2018-07-26 10:00:50
举报
文章被收录于专栏:Golang语言社区Golang语言社区

社区订阅号:Golang语言社区 社区服务号:Golang技术社区 如有问题或建议,请公众号留言

1-声明一个匿名函数 func(参数列表) 返回值列表 { 函数体… } 2-匿名函数的调用

代码语言:javascript
复制
package main
import (
"fmt"
)
func main() {
    //无参数直接加括号
    func() int {
        var i int =5
        fmt.Printf("func 1\n")
        return i
    }()
   //有参数,在括号里加参数
    func(arge int)  {
          fmt.Printf("func %d\n",arge)
    }(2)
  //也可以先赋给一个变量再调用
   a := func() int {
          fmt.Printf("func 3\n")
          return 5
     }
    a()
}

程序输出:

代码语言:javascript
复制
func 1
func 2
func 3

2.一个复杂的例子分析

代码语言:javascript
复制
func main() { 
    var j int = 5 
    a := func()(func()) { 
        var i int = 10 
        return func() { 
            fmt.Printf("i, j: %d, %d\n", i, j) 
        } 
    }() 
    a() 
    j *= 2 
    a() 
} 

程序输出:

代码语言:javascript
复制
i, j: 10, 5  
i, j: 10, 10 

分析: ``` 1---"…func()(func()) {….." 表明此匿名函数返回值的类型是func(), 即此匿名函数返回一个函数指针(此处引用一下c 的概念); 2---"…return func() { fmt.Printf("i, j: %d, %d\n", i, j) }…" 表明返回的函数指针指向一个打印 i, j: %d, %d\n 的函数; 3---"…a := func()(func()) { … }()…" 末尾的括号表明匿名函数被调用,并将返回的函数指针赋给变量a ; 综合来看: "…a := func()(func()) { var i int = 10 return func() { fmt.Printf("i, j: %d, %d\n", i, j) } }()…" 此代码片段的意思"等价于" a := func() { fmt.Printf("i, j: %d, %d\n", i, j) } 至于为何要用匿名函数如此的转一圈,是因为要引用闭包的概念,此概念省略不表,多写点代码试试就能体会了。

本文来自:CSDN博客

感谢作者:plc_jianghao

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档