我有一个叫map
的{{1}}
nearby
我想确定delete()调用是否确实找到了要删除的键,我尝试读取返回值:
func Delete(w http.ResponseWriter, r *http.Request) {
params := mux.Vars(r)
delete(nearby, params["id"])
}
但是编译器不喜欢这样-我如何确定是否删除了键/值?
答案 0 :(得分:3)
在删除值之前探测地图:
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)
}
答案 1 :(得分:1)
Go内置delete()
不会返回任何内容,因此您无法确定它是否删除了任何内容。
但是您可以 check if the map contains the key和delete()
(如果存在)。
if _, ok := nearby[params["id"]]; ok {
delete(nearby, params["id"])
} else {
// whatever
}