Определение, действительно ли при удалении удаляется существующий ключ на карте - PullRequest
0 голосов
/ 24 октября 2018

У меня есть map с именем nearby

func Delete(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    delete(nearby, params["id"])
}

Я хочу выяснить, действительно ли вызов delete () нашел ключ для удаления, я попытался прочитать возвращаемое значение:

func Delete(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    result := delete(nearby, params["id"])
}

но компилятору это не понравилось - как я могу узнать, был ли удален ключ / val?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Встроенный Go delete() ничего не возвращает, поэтому вы не можете сказать, удалил ли он что-либо.

Но вы можете проверить, содержит ли картавведите и delete(), если оно есть.

if _, ok := nearby[params["id"]]; ok {
    delete(nearby, params["id"])
} else {
    // whatever
}
0 голосов
/ 24 октября 2018

Проверьте карту перед удалением значения:

func Delete(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    _, deleted := nearby[params["id"]]
    delete(nearby, params["id"])
    fmt.Println(deleted)
}

Этот фрагмент и код в вопросе имеют гонку данных, потому что обработчики HTTP могут вызываться одновременно.Добавьте мьютекс для защиты карты.

var (
    nearby = make(map[string]string)
    mu     sync.Mutex
)

func Delete(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    mu.Lock()
    _, deleted := nearby[params["id"]]
    delete(nearby, params["id"])
    mu.Unlock()
    fmt.Println(deleted)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...