Go有三种类型的函数
- 普通的带名字的函数
- 匿名函数或者lambda函数
- 方法methods
除了main、init函数以外,所有的函数都可以有参数和返回值。函数参数、返回值以及它们的类型被统称为 函数签名
关于函数重载:Go语言不支持函数重载(为了效率),所以要对函数进行不同的命名
如果需要申明一个外部定义的函数,只需要给出函数名和函数签名,无需函数体
函数也可以以申明的方式被使用,作为一个函数类型type binOp func(int, int) int
,在这里,不需要函数体 {}
函数是一等值(first-class value),可以赋值给变量,这个变量知道自己指向的函数的签名,所以给它赋一个具有不同签名的函数值是不可能的
函数值之间可以相互比较:如果它们引用的是相同的函数或者都是nil的话,则认为它们是相同的函数。
函数不能嵌套声明,不过可以使用匿名函数来打破限制
目前go没有泛型,不支持那种多种类型的函数。不过大部分情况可以通过接口,特别是空接口和类型选择(type switch)与/或者通过使用反射来实现相似的功能。但影响代码复杂度和效率,所以最好为每个类型单独创建一个函数,且代码可读性更强