【Go学习笔记】9、函数func

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

函数func

  • Go函数不支持嵌套、重载和默认参数
  • 但是支持一下特性

    • 无需声明原型、不定长度变参、多返回值、命名返回值参数
    • 匿名函数、闭包
  • 定义函数使用关键字func,且左大括号不能另起一行

  • 函数也可以作为一种类型使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//commom
func main() {
a,b,c,d := 1,2,3,4
test(a,b,c,d)
}
func test(s ...int) {
fmt.Println(s)
}
//closure
func main() {
test := test(1)
fmt.Println(test(1))
}
func test(a int) func(int) int {
return func(b int) int {
return a + b
}
}

defer

  • 执行方式类似其他语言中的析构函数,在函数体执行结束后,按照调用顺序的相反顺序逐个执行
  • 即使函数发生严重错误也会执行
  • 支持匿名函数的调用
  • 常用于资源清理、文件关闭、解锁以及记录时间等操作
  • 通过与匿名函数配合可在return之后修改函数计算结果
  • 如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则则是引用某个变量的地址

  • Go 没有异常机制,担有panic/recover模式来处理错误

  • panic可以在任何地方引发,但recover只有在defer调用的函数中有效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func main(){
A()
B()
C()
}
func A(){
fmt.Println("Func A")
}
func B(){
defer func(){
if err := recover(); err != nil {
fmt.Println("Recover in B")
}
}()
panic ("Panic in B")
}
func C(){
fmt.Println("Func C")
}

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

本文来自:HundredLee's Blog

感谢作者:HundredLee

查看原文:【Go学习笔记】9、函数func

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

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