首页 > 代码库 > Go - 函数
Go - 函数
定义
语法 - func 函数名 (参数列表) (返回值列表){
}
package mainimport ( "fmt")func myfunc(a, b int) (r1, r2 int) { r1 = a + b r2 = a - b return}func main() { r1, r2 := myfunc(5, 1) fmt.Println(r1) fmt.Println(r2)}
//output
6
4
匿名函数
Go 语言允许将函数传递给一个变量,即定义函数也算是定义一种类型。 声明匿名函数时,可以省略函数的名称
func main() { f1 := func() { fmt.Println("I am fuction 1...") } f1()}//outputI am fuction 1...
闭包
func closure(x int) func(y int) (r int) { fmt.Printf("%p\n", &x) return func(y int) (r int) { fmt.Printf("%p\n", &x) r = x + y return r }}func main() { f2 := closure(10) fmt.Println(f2(1)) fmt.Println(f2(2))}//output0x114821dc0x114821dc110x114821dc12
defer
Go 函数通过使用defer关键字,实现了许多“神奇”的事情
1. 改变函数执行的顺序 - 如果在函数体中定义 defer, 会按照与定义顺序相反的顺序执行
func main() { for i := 0; i < 3; i++ { defer fmt.Println(i) }}//output210
2. Go语言没有异常处理(try...catch),但可以使用 “panic + recover” 模式来处理异常. panic可以在任何地方触发,但是recover必须在defer调用的函数中执行,且必须定义在panic之前
func A() { fmt.Println("function A ...")}func B() { defer func() { if err := recover(); err != nil { fmt.Println("recover") } }() panic("panic in function B")}func C() { fmt.Println("function C ...")}func main() { A() B() C()}//outputfunction A ...recoverfunction C ...
所以: 通过使用defer + recover 的方式,可以达到 “finally”的效果,例如清理资源,关闭文件等。
Go - 函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。