go 速学 - 09 - 函数

mrseasons · · 1876 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

目录

摘要

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

函数

特点

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

定义函数

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

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:mrseasons

查看原文:go 速学 - 09 - 函数

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1876 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传