美文网首页
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