万丈高楼平地起-init函数和Import导包
- golang 导入依赖库总是会执行init函数、其执行流程如图所示
- 验证代码 注意( go env -w GO111MODULE=on 会出现编译报错问题:package gogoup/initfunc_import/lib1 is not in GOROOT (/usr/local/go/src/gogoup/initfunc_import/lib1)、设置成outo或者off即可)
//lib1 package lib1 import ( "fmt" "gogoup/initfunc_import/lib2" ) func Test() { fmt.Println("lib1 的Test()函数被执行了") lib2.Test() } func init() { fmt.Println("lib1 的init()函数被执行了 ") } //lib2 package lib2 import "fmt" func Test() { fmt.Println("lib2 的Test()函数被执行了") } func init() { fmt.Println("lib2 的init()函数被执行了 ") } //main package main import "gogoup/initfunc_import/lib1" func main() { lib1.Test() }
- 代码结构
- 执行结果
导包的骚操作
- 使用 _ "gogoup/initfunc_import/lib2" 匿名导入包,常见数据库驱动为了执行init函数中的配置
- 使用 lb "gogoup/initfunc_import/lib2" 别名导入包,使用方式lb.Test()
- 使用 . "gogoup/initfunc_import/lib2" 导入包所有的方法到本作用域(不推荐)