一、函数语法
func 函数名(形参列表) (返回值列表){
......
return 返回值
}
例如:
package main import "fmt" func test_func(n1 int,n2 int) (int){ var ret int ret = n1 + n2 return ret } func main(){ var f int f = test_func(1,3) fmt.Printf("Type: %T Value: %v ",f,f) } ##结果## Type: int Value: 4
二、递归函数
例子
package main import "fmt" func digui_func(n1 int){ if n1 > 2 { n1-- fmt.Println(n1) digui_func(n1) } } func main(){ digui_func(5) } ##结果## 4 3 2
三、init函数(初始化函数)
没一个源文件都可以包含一个init函数,init函数校准main函数执行前执行。
例子:
package main import "fmt" func init(){ fmt.Println("init.....") } func main(){ fmt.Println("main.....") } ##结果## init..... main.....
四、匿名函数
例子:
package main import "fmt" func main(){ res := func(n1,n2 int) int{ return n1 + n2 } var s1 int var s2 int s1 = res(1,2) fmt.Println(s1) s2 = res(3,4) fmt.Println(s2) } ##结果## 3 7
全局匿名函数
例子:
package main var ( res := func(n1,n2 int) int{ return n1 + n2 } )
五、闭包函数
例子:
package main import "fmt" func bibao() func (int) int { var n int = 10 return func (x int) int { n = n + x return n } } func main(){ f := bibao() f1 := bibao() fmt.Println(f(1)) fmt.Println(f1(2)) } ##结果## 11 12
六、函数的defer
为了在函数执行完成后,及时释放资源,go的设计者提供了defer(延时机制)
适合用再关闭文件、关闭数据库连接等
例子:
package main import "fmt" func test() int { defer fmt.Println("s1") defer fmt.Println("s2") var ss int = 10 fmt.Println("s3") return ss } func main(){ ret := test() fmt.Println(ret) } ##结果## s3 s2 s1 10