package server import ( "errors" "fmt" ) type automap map[string]interface{} var errExists = errors.New("already exists") var errNotFound = errors.New("no such entry") func (m automap) add(v interface{}) string { for n := 1;; n++ { k := fmt.Sprintf("%d", n) if _, ok := m[k]; !ok { m[k] = v return k } } } func (m automap) rename(old string, new string) (interface{}, error) { if _, ok := m[old]; !ok { return nil, errNotFound } if _, ok := m[new]; ok { return nil, errExists } v := m[old] m[new] = v delete(m, old) return v, nil }