init()函数会在每个包完成初始化后自动执行,并且执行优先级比main函数高。
init 函数通常被用来:
对变量进行初始化
检查/修复程序的状态
注册
运行一次计算
特性
init函数不需要传入参数,也不会返回任何值。与main相比而言,init没有被声明,因此也不能被引用。
每个源文件中可以包含多个init函数
package main
import "fmt"
func init(){
fmt.Println("init 1")
}
func init(){
fmt.Println("init2")
}
func main(){
fmt.Println("main")
}
/*执行结果:
init1
init2
main */
示例
项目一般目录结构
src : 放源码目录
bin :生成的可执行程序目录
pkg :放平台的相关库
├── bin
│
├── pkg
│
├── scr
│ ├── calc
│ │ └── calc.go
│ ├── debug
源代码
//程序入口
# vim main.go
package main
import (
"day3/init/calc"
"fmt"
)
// 2 、再执行这个打印
func init() {
fmt.Println("this is main")
}
func main() {
add := calc.Add(5, 2)
minus := calc.Minus(6, 3)
fmt.Println("a + b = ", add)
fmt.Println("a - b = ", minus)
}
# vim /src/calc.go
package calc
import (
"fmt"
"os"
)
// 1、先执行这个init 打印
func init() {
hostname, err :=os.Hostname()
if hostname == "" || err != nil {
hostname = "localhost"
}
fmt.Println("this init name: ", hostname)
}
func Add(a, b int) int {
return a + b
}
func Minus(a, b int) int {
return a - b
}
执行结果
this init name: victor.local
this is main
a + b = 7
a - b = 3