code: func (mc *MessageCache) Get(c context.Context, cset config.Set, path string, msg proto.Message) (
  	proto.Message, error) {
  
  	// If no Lifetime is configured, bypass the cache layer.
  	if mc.Lifetime <= 0 {
  		err := mc.GetUncached(c, cset, path, msg)
  		return msg, err
  	}
  
  	key := messageCacheKey{cset, path}
  
  	// Load the value from our cache. First, though, take out a lock on this
  	// specific config key. This will prevent multiple concurrent accesses from
  	// slamming the config service, particularly at startup.
  	var v interface{}
  	var err error
  	v, err = messageCache.LRU(c).GetOrCreate(c, key, func() (interface{}, time.Duration, error) {
  		// Not in cache or expired. Reload...
  		if err := mc.GetUncached(c, cset, path, msg); err != nil {
  			return nil, 0, err
  		}
  		return proto.Clone(msg), mc.Lifetime, nil
  	})
  	if err != nil {
  		return nil, err
  	}
  	return v.(proto.Message), nil
  }
docs: // Get returns an unmarshalled configuration service text protobuf message.
  //
  // If the message is not currently in the process cache, it will be fetched from
  // the config service and cached prior to being returned.