golang init 与 sync.Once 区别

文章目录 (?) [+]

    sync.Once 是在代码运行中需要的时候执行,且只执行一次。

    init 函数是在文件包首次被加载的时候执行,且只执行一次。

    一个包中可以有多个 init 函数。

    init 函数不能被其它函数调用。

    const、var、 init 函数与 main 函数的执行顺序:

    const、var、 init 函数与 main 函数的执行顺序


    验证代码

    package main
    
    import (
        "fmt"
        "sync"
    )
    
    var once sync.Once
    
    func Test() {
        fmt.Println("Only once")
    }
    
    func main() {
        done := make(chan bool)
        for i := 0; i < 5; i++ {
            go func() {
                once.Do(Test)
                done <- true
            }()
        }
    
        for i := 0; i < 5; i++ {
            <-done
        }
    }
    
    /*
    Only once
    */


    本文标题:golang init 与 sync.Once 区别
    本文链接:https://lanseyujie.com/post/golang-init-and-sync-once-difference.html
    版权声明:本文使用「署名-非商业性使用-相同方式共享」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0