go 速学 - 09 - 函数

来源:互联网 发布:淘宝导航条代码 编辑:程序博客网 时间:2024/05/17 22:57

目录

    • 函数
      • 特点
      • 定义函数
      • 变参
      • 闭包与柯理化
        • 闭包
        • 柯理化

摘要

定义函数,多个返回值,命名返回值,变参,闭包,柯理化

函数

特点

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

定义函数

//单个返回值,可以省略括号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
0 0