code: func (s *Store) SetCollection(name string, compare KeyCompare) *Collection {
  	if compare == nil {
  		compare = bytes.Compare
  	}
  	for {
  		orig := atomic.LoadPointer(&s.coll)
  		coll := copyColl(*(*map[string]*Collection)(orig))
  		cnew := s.MakePrivateCollection(compare)
  		cnew.name = name
  		cold := coll[name]
  		if cold != nil {
  			cnew.rootLock = cold.rootLock
  			cnew.root = cold.rootAddRef()
  		}
  		coll[name] = cnew
  		if atomic.CompareAndSwapPointer(&s.coll, orig, unsafe.Pointer(&coll)) {
  			cold.closeCollection()
  			return cnew
  		}
  		cnew.closeCollection()
  	}
  }
docs: // SetCollection() is used to create a named Collection, or to modify
  // the KeyCompare function on an existing Collection.  In either case,
  // a new Collection to use is returned.  A newly created Collection
  // and any mutations on it won't be persisted until you do a Flush().