用Once初始化Cache资源

用Once初始化Cache资源

Content #

比如标准库内部cache的实现上,就使用了 Once 初始化 Cache 资源,包括 defaultDir 值的获取:

func Default() *Cache { // 获取默认的Cache
  defaultOnce.Do(initDefaultCache) // 初始化cache
  return defaultCache
}

  // 定义一个全局的cache变量,使用Once初始化,所以也定义了一个Once变量
var (
  defaultOnce  sync.Once
  defaultCache *Cache
)

func initDefaultCache() { //初始化cache,也就是Once.Do使用的f函数
  ......
  defaultCache = c
}

  // 其它一些Once初始化的变量,比如defaultDir
  var (
  defaultDirOnce sync.Once
  defaultDir     string
  defaultDirErr  error
)

Viewpoints #

From #

08 | Once:一个简约而不简单的并发原语