Go init函数

Submitted by Lizhe on Thu, 08/24/2017 - 12:24

init函数和main函数一样是go语言中的保留函数,由go自动调用

main函数只能应用于main包中, 但是init函数可以使用在任意包中

init函数会在包被导入时自动执行(在常量和变量初始化之后)

 

我们使用下面的例子进行验证

C:\DEV\workspace_angularjs\GoHelloInit\src\main\main.go

package main

import (
    t "testinit"
)

func main(){
    t.SayHello()
}

C:\DEV\workspace_angularjs\GoHelloInit\src\testinit\app.go

package testinit

import (
    "fmt"
)

var a = 1;

func init(){
    fmt.Println("init called" , a);
}
func SayHello(){
    fmt.Println("hello world");
}

C:\DEV\workspace_angularjs\GoHelloInit\src\testinit\app2.go

package testinit

import (
    "fmt"
)

var b = 1;

func init(){
    fmt.Println("init called2" , b);
}

 

 

可见输出

init called 1
init called2 1
hello world
 

 

我们知道如果在同一个包下定义同名func会得到如下错误

468

 

不过如果在同一包下多个文件内定义多个init函数还是可以的

467

甚至可以在同一个文件中定义多个init函数

469

906