登录
首页 >  Golang >  Go问答

确定删除是否确实删除了映射中的现有键

来源:stackoverflow

时间:2024-04-14 09:39:35 112浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《确定删除是否确实删除了映射中的现有键》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我有一个名为 nearbymap

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"])
}

但是编译器不喜欢这样 - 我怎样才能知道键/值是否被删除?


解决方案


在删除值之前探测地图:

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)
}

go 内置 delete() 不会返回任何内容,因此您无法判断它是否删除了任何内容。

但是您可以 check if the map contains the keydelete() 它(如果存在)。

if _, ok := nearby[params["id"]]; ok {
    delete(nearby, params["id"])
} else {
    // whatever
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《确定删除是否确实删除了映射中的现有键》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>