code: func (cache *Cache) get(proposalHash []byte) (*proposalInfo, error) {
  	var hash ProposalHash
  	copy(hash[:], proposalHash)
  	cache.RLock()
  	propInfo := cache.proposals[hash]
  	cache.RUnlock()
  	if propInfo == nil {
  		cache.Lock()
  		defer cache.Unlock()
  		propInfo = cache.proposals[hash]
  		if propInfo == nil {
  			prop, err := cache.backend.GetProposal(proposalHash)
  			if err != nil {
  				return nil, err
  			}
  			propInfo = &proposalInfo{
  				ballot: prop,
  			}
  			cache.proposals[hash] = propInfo
  		}
  	}
  	return propInfo, nil
  }
docs: // Get the cache accountInfo item creating it if necessary