一。定义
1. 关键字:func
2.函数名:
3.参数列表:
1. 实参:传入的参数
2.虚参:函数定义时的,占位参数,是局部变量和外部或者全局变量冲突,互不影响。
3.变长参数:arr ...int,得放在最后
4.返回值:
4.1 如果返回值命名了,这个名称不能在函数内再用
4.2 函数多返回值:
二。闭包函数:
1.将整个函数的定义一气呵成写好并赋值给一个变量。然后用这个变量名作为函数名去调用函数体
2.因为 Go 不支持在一 个函数的内部再定义一个嵌套函数,所以使用闭包函数能够实现在一个函数内 部定义另一个函数的目的。
3.闭包函数会改变外部变量的值。
三。把函数变成一种数据类型:
1. 格式: type xxx func(yyy)(zzz)
a. 在类型声明的名称xxx右边的是func关键字,我们由此就可知道这是一个函数类型的声明。
b. 在func右边的就是这个函数类型的参数列表yyy和结果列表zzz
c. 方式与函数声明的是一致的。只是紧挨在参数列表左边的不是函数名,而是关键字func。这里函数名称和func互换了一下位置而已。
函数高阶用法:
一。函数类型也是数据类型
package main import "fmt" type Printer func(contents string) (n int, err error) func printToStd(contents string) (bytesNum int, err error) { return fmt.Println(contents) } func main() { var p Printer p = printToStd p("something") }
1. 格式:
type Printer func(contents string) (n int, err error)
书写函数签名的方式与函数声明的是一致的。只是紧挨在参数列表左边的不是函数名称,而是关键字func。这里函数名称和func互换了一下位置而已。
以上格式和说明,把一个函数变成了一个数据类型。
2.实现:
二。高阶函数的特点:
1. 接受其他的函数作为参数传入;
2. 把其他的函数作为结果返回。
样例一
样例二