Я хочу обновить ключ от одного имени к другому, используя параметры URL. У меня есть код, но вывод неправильный. Смотри ниже.
Это карта
var data map[string][]string
Метод PUT для функции im, вызывающей
r.HandleFunc("/updatekey/{key}/{newkey}", handleUpdateKey).Methods("PUT")
Функция handleUpdateKey, в которой подробно объясняется, что он делает.
func handleUpdateKey(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
k := params["key"] //get url params
nk := params["newkey"]
s := make([]string, len(data[k])) //create slice of string to store map variables
for i := range data { //range over the data map
fmt.Fprintf(w, i)
if k != i { //check if no keys exist with URL key param
fmt.Fprintf(w, "That KEY doesn't exist in memory")
break //kill the loop
} else { //if there is a key the same as the key param
for _, values := range data[i] { //loop over the slice of string (values in that KEY)
s = append(s, values) //append all those items to the slice of string
}
delete(data, k) //delete the old key
for _, svalues := range s { //loop over the slice of string we created earlier
data[nk] = append(data[nk], svalues) //append the items within the slice of string, to the new key... replicating the old key, with a new key name
}
}
}
}
В приведенном ниже примере все значения этого KEY должны быть присвоены фрагменту строки, который мы позже перебираем и добавляем в новый KEY. Это работает, однако, вывод, как показано ниже, который явно неверен
KEY: catt: VALUE:
KEY: catt: VALUE:
KEY: catt: VALUE: zeus
KEY: catt: VALUE: xena
СТАРЫЙ ВЫХОД:
KEY: dog: VALUE: zeus
KEY: dog: VALUE: xena
ПРАВИЛЬНЫЙ НОВЫЙ ВЫХОД:
KEY: catt: VALUE: zeus
KEY: catt: VALUE: xena