code: func (md *cachedMetrics) GetMetrics() (*Metrics, error) {
  	md.once.cache(func() error {
  		md.resultMetrics, md.resultError = md.wrapped.GetMetrics()
  		return md.resultError
  	})
  	return md.resultMetrics, md.resultError
  }
docs: // GetMetrics runs the wrapped metrics provider's GetMetrics methd once and
  // caches the result. Will not cache result if there is an error.
  // See MetricsProvider.GetMetrics