code: func (o *cacheOnce) cache(f func() error) {
  	if atomic.LoadUint32(&o.done) == 1 {
  		return
  	}
  	// Slow-path.
  	o.m.Lock()
  	defer o.m.Unlock()
  	if o.done == 0 {
  		err := f()
  		if err == nil {
  			atomic.StoreUint32(&o.done, 1)
  		}
  	}
  }
docs: // Copied from sync.Once but we don't want to cache the results if there is an
  // error