golang入门到放弃:2.匿名函数、闭包、递归函数

不留余白 · · 495 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

匿名函数

Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用。

  • eg1
func main() {
    a:=10
    b:=5
    //将闭包函数类型赋值给f
    f:=func (c int,d int)int {
        return c+d
    }
    fmt.Println(f(a,b))//15
    fmt.Printf("%T",f,)//func(int, int) int
    fmt.Printf("%T",f(a,b))//int
}
  • eg2
func main() {

   //函数调用 将test2的返回值给f
   f1:=test12()
   //fmt.Printf("%T",f1)
   for i:=5;i<=10 ;i++  {
      fmt.Println(f1())
   }
}

//可以通过匿名函数和闭包 实现函数在栈区的本地化
func test12()  func()int{
   a:=10
   fmt.Printf("init=%d\n",a)
   return func() int{
       a++
      return a
   }
}

输出

init=10
11
12
13
14
15
16
  • eg3 效果等同eg2
func main() {
   a := 10
   for i := 5; i <= 10; i++ {
      func() int {
         a++
         fmt.Println(a)
         return  a
      }()
   }
}

输出

11
12
13
14
15
16

递归

计算n的阶乘

func main(){
   jiecheng(4) //4*3*2*1=24
 fmt.Println(sum)
}

var sum int =1
func jiecheng(n int)int{
   if n==1{
      return sum
   }
   sum*=n
   return jiecheng(n-1)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:不留余白

查看原文:golang入门到放弃:2.匿名函数、闭包、递归函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

495 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传