希望某段初始化逻辑在并发环境下只执行一次(如加载配置、建立连接池),Go 惯用做法是?

Go

  1. A.sync.Once.Do(f):并发调用也只执行一次,其余阻塞到 f 完成
  2. B.用全局 bool 变量判断,先检查再赋值
  3. C.用 time.Sleep 错开各 goroutine 的启动时间
  4. D.init() 函数里加锁,每次调用前重新执行 init