go init函数_聊聊golang的包init

本文主要研究一下golang中的包init

442d208258746390578482b21b124c0f.png

包init实例

pkg1

package pkg1import (    "fmt")func init() {    fmt.Println("pkg1 init1")}func init() {    fmt.Println("pkg1 init2")}func Hello() {    fmt.Println("pkg1 hello")}

pkg2

package pkg2import (    "fmt"    "init-demo/pkg3")func init() {    fmt.Println("pkg2 init1")}func init() {    fmt.Println("pkg2 init2")}func World() {    fmt.Println("pkg2 world")    pkg3.Greet()}

pkg3

package pkg3import "fmt"func init() {    fmt.Println("pkg3 init1")}func init() {    fmt.Println("pkg3 init2")}func Greet() {    fmt.Println("pkg3 greet")}

main

package mainimport (    "fmt"    "init-demo/pkg1"    "init-demo/pkg2"    "time")func init() {    fmt.Println("main init1")}func init() {    go func() {        fmt.Println("main init2 with go routine")        time.Sleep(time.Second * 5)        fmt.Println("main init2 finish sleep")    }()}func init() {    fmt.Println("main init3")}func main() {    fmt.Println("main")    pkg2.World()    pkg1.Hello()    time.Sleep(time.Second * 10)}

输出

pkg1 init1pkg1 init2pkg3 init1pkg3 init2pkg2 init1pkg2 init2main init1main init3mainpkg2 worldpkg3 greetpkg1 hellomain init2 with go routinemain init2 finish sleep

小结

  • 每个package可以定义多个init函数,甚至在同一个go文件也可以有多个init函数。
  • 如果一个包没有import其他包,则多个init按出现顺序初始化
  • 同一个包多个文件都有init函数则按文件名顺序初始化
  • 一般go fmt的话,会对import进行排序,这样子保证初始化行为的可再现性
  • 如果一个包有import其他包,则按依赖顺序从最里层包开始初始化

doc

  • Package_initialization
  • Go语言init函数你必须记住的六个特征
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值