go学习笔记(12)-基本语法-函数

函数

特点

  • 不支持嵌套,重载和默认参数
  • 支持闭包

定义函数

//单个返回值,可以省略括号
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
posted @ 2015-03-05 09:49  doitNow  阅读(149)  评论(0)    收藏  举报