golang 函数和闭包

奚落大神 · · 83 次点击 · · 开始浏览    

接触golang有些时间了,以前磕磕碰碰的勉强写过几个小程序,最近工作又亲近golang,就想着再回头巩固一下,曾经遇到过几次的问题又再次遇到了,golang的函数定义格式是这样的:

func function_name( [parameter list] ) [return_types] {
   函数体
}

函数体之上的哪一行总共分为三个部分,依次是声明关键字,函数名和参数,返回值。函数名和参数是一个整体所以归为一组方便识别的,有时会遇到一些异类的形式,今天就遇到这样的:

func fib() func() int {
    a, b := 0, 1
    return func() int {
        a, b = b, a+b
        return a
    }
}

比常见的多了一段,让人有点蒙圈了,再回顾到闭包的知识点才解决此困惑,说一下我自己对闭包的总结,闭包就是函数返回一个匿名函数,看一个例子:

package main

import "fmt"

func returnNum() func() (int, int)  {
    return func() (int, int) {
        return 0, 1
    }
}
func main()  {
    q := returnNum()
    a, b := q()
    
    fmt.Println(a, b)
}

在强类型语言里面,函数返回值类型是不可少的,闭包误导人的地方就在于它的返回值定义,返回一个匿名函数,函数得注明返回值,返回值和函数名之间习惯上会加空格,这就造成闭包的形式有别于普通函数,上面这个闭包双返回值也是有些耐人寻味的。少见多怪,主要还是因为我是个业余玩家。

还有方法:结构体方法,对象方法也是初学者不易理解的。

本文来自:简书

感谢作者:奚落大神

查看原文:golang 函数和闭包

入群交流(该群和以上内容无关):Go中文网 QQ交流群:798786647 或 加微信入微信群:274768166 备注:入群; 公众号:Go语言中文网

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