Once 的作用是保证一个 Once 对象内的 Do 函数在多次调用的情况下只会被执行一次。
    可用 Once 实现单例模式,详见 Singleton 单例

    1. package main
    2. import (
    3. "fmt"
    4. "sync"
    5. )
    6. func main() {
    7. once1 := new(sync.Once)
    8. once1Func := func() {
    9. fmt.Println("once1 do function")
    10. }
    11. once2 := new(sync.Once)
    12. once2Func := func() {
    13. fmt.Println("once2 do function")
    14. }
    15. once1.Do(once1Func)
    16. once1.Do(once1Func)
    17. once1.Do(once1Func)
    18. once2.Do(once2Func)
    19. once2.Do(once2Func)
    20. once2.Do(once2Func)
    21. }

    image.png