init函数
基本介绍
每一个源文件都可以包含一个 init 函数,该函数会在 main 函数执行前执行,被Go运行框架调用。
// main/main.go 文件
package main
import "fmt"
var a int = testVars()
func testVars() int {
fmt.Println("testVars")
return 90
}
func init() {
fmt.Println("init")
}
func main() {
fmt.Println("main", a)
}
// utils-init // import包里面的init函数先执行
// testVars
// init
// main 90
// Age= 20 Name= tom
// utils/utils.go 文件
package utils
import "fmt"
var Age int
var Name string
func init() {
Age = 20
Name = "tom"
fmt.Println("utils-init")
}
使用细节
1、如果一个文件同时包含全局变量定义、init函数、main函数,执行流程是:
全局变量定义 -> init函数 -> main函数
2、init函数最主要的作用,就是完成一些初始化工作。
匿名函数
Go支持匿名函数,如果我们某个函数只执行一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用。
使用方式
- 在匿名函数定义的时候,就直接调用。
- 将匿名函数赋值给一个变量,通过该变量调用匿名函数
- 全局匿名函数,将匿名函数赋值给一个全局变量,就成为了全局匿名函数 ```go // 匿名函数 res := func(n1 int, n2 int) int { return n1 + n2 }(10, 20) fmt.Println(“res=”, res) // res= 30
// 局部匿名函数变量 sub := func(n1 int, n2 int) int { return n1 - n2 } fmt.Println(“sub=”, sub(20, 10))
// 全局匿名函数 var ( fn01 = func(n1 int, n2 int) int { return n1 - n2 } fn02 = func(n1 int, n2 int) int { return n1 + n2 } ) fmt.Println(“fn01=”, fn01(20, 10)) // fn01= 10 fmt.Println(“fn02=”, fn02(20, 10)) // fn02= 30
```