code: func (k *Store) loadAndMergeReaderIfNeeded(f io.Reader) error {
  	var versionOnDisk int64
  	// Decode *only* the version field to check whether anyone else has
  	// modified the db; gob serializes structs in order so it will always be 1st
  	dec := gob.NewDecoder(f)
  	err := dec.Decode(&versionOnDisk)
  	if err != nil {
  		return fmt.Errorf("Problem checking version of key/value data from %v: %v", k.filename, err)
  	}
  	// Totally uninitialised Version == 0, saved versions are always >=1
  	if versionOnDisk != k.version {
  		// Reload data & merge
  		var dbOnDisk map[string]interface{}
  		err = dec.Decode(&dbOnDisk)
  		if err != nil {
  			return fmt.Errorf("Problem reading updated key/value data from %v: %v", k.filename, err)
  		}
  		k.reapplyChanges(dbOnDisk)
  		k.version = versionOnDisk
  	}
  	return nil
  }
docs: // As loadAndMergeIfNeeded but lets caller decide how to manage file handles