美文网首页
package中init方法的执行顺序问题

package中init方法的执行顺序问题

作者: bocsoft | 来源:发表于2018-11-12 15:28 被阅读0次

(1)对同一个 go 文件的 init( ) 调用顺序是从上到下的
(2)对同一个 package 中的不同文件,将文件名按字符串进行“从小到大”排序(数字排在前面),之后顺序调用各文件中的init()函数
(3)对于不同的 package,如果不相互依赖的话,按照 main 包中 import 的顺序调用其包中的 init() 函数
(4)如果 package 存在依赖,调用顺序为最后被依赖的最先被初始化,例如:导入顺序 main –> A –> B –> C,则初始化顺序为 C –> B –> A –> main,一次执行对应的 init 方法。

first.go

package multiple_init_funcs

import "fmt"

func init()  {
    fmt.Println("first init in multiple_init_funcs/first.go")
}

func init()  {
    fmt.Println("second init in multiple_init_funcs/first.go")
}

second.go
package multiple_init_funcs

import "fmt"

func init()  {
    fmt.Println("first init in multiple_init_funcs/second.go")
}
func init()  {
    fmt.Println("second init in multiple_init_funcs/second.go")
}

func Hello()  {
    fmt.Println("Hello")
}

main_test.go

package multiple_init_funcs

import (
    "fmt"
    "testing"
)

func TestMultipleInitFunctions(t *testing.T)  {
    fmt.Println("in main_test.go")

    t.Logf("pass")

    /*
    
    输出结果:
    first init in multiple_init_funcs/first.go
    second init in multiple_init_funcs/first.go
    first init in multiple_init_funcs/second.go
    second init in multiple_init_funcs/second.go

     */
}


相关文章

网友评论

      本文标题:package中init方法的执行顺序问题

      本文链接:https://www.haomeiwen.com/subject/anlcfqtx.html