函数 #
特点 #
- 不支持嵌套,重载和默认参数
- 支持闭包
定义函数 #
//单个返回值,可以省略括号
func test0(a int, b string) int {
return a
}
//多个返回值
func test1(a int, b string) (int, string) {
return a, b
}
//无返回值
func test2(a int, b string) {}
//参数简写
func test3(a, b int) {}
可以对返回值进行命名,这样 return 的时候就不用一一指定了
//命名返回值
func test4() (a, b, c int) {
a, b, c = 1, 2, 3
return
//或
//return a,b,c
}
变参 #
func args(a ...int) {
for i, v := range a {
fmt.Println(i, v)
}
}
闭包与柯理化 #
闭包 #
func closure(s []func()) {
for i := 0; i < 5; i++ {
s[i] = func() {
fmt.Println(i)
}
}
}
s := make([]func(), 5)
closure(s)
for i, v := range s {
fmt.Print(i, ",")
v()
}
//0,5
//1,5
//2,5
//3,5
//4,5
柯理化 #
func curry(x int) func(int) int {
return func(y int) int {
return x + y
}
}
adder := curry(2)
fmt.Println(adder, adder(3)) //0x2950 5