code: func (r *StandardRegistry) GetOrRegister(name string, i interface{}) interface{} {
  	r.mutex.Lock()
  	defer r.mutex.Unlock()
  	if metric, ok := r.metrics[name]; ok {
  		return metric
  	}
  	if v := reflect.ValueOf(i); v.Kind() == reflect.Func {
  		i = v.Call(nil)[0].Interface()
  	}
  	r.register(name, i)
  	return i
  }
docs: // Gets an existing metric or creates and registers a new one. Threadsafe
  // alternative to calling Get and Register on failure.
  // The interface can be the metric to register if not found in registry,
  // or a function returning the metric for lazy instantiation.