登录
首页 >  Golang >  Go问答

避免需要冗余检查来映射给定的字符串零值?

来源:stackoverflow

时间:2024-04-29 09:42:35 469浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《避免需要冗余检查来映射给定的字符串零值?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我们有一个 map[string]string,我假设这意味着从地图中检索到的字符串的零值是 ""

这是否意味着:

var userid, ok = params["user_id"];

if !ok || userid == "" {
    return 422, "missing user_id in request"
}

与此相同的逻辑:

var userId = params["user_id"];

if  userId == "" {
    return 422, "Missing user_id in request"
}

只是确保我的理解是正确的。


解决方案


如果您打算存储值类型的零值,情况就不一样了。

请参阅此示例:

m := map[string]string{
    "empty": "",
}

if v, ok := m["empty"]; ok {
    fmt.printf("'empty' is present: %q\n", v)
} else {
    fmt.println("'empty' is not present")
}
if v, ok := m["missing"]; ok {
    fmt.printf("'missing' is present: %q\n", v)
} else {
    fmt.printf("'missing' is not present")
}

它输出(在Go Playground上尝试):

'empty' is present: ""
'missing' is not present

确实,如果您从不在映射中存储零值,则可以简单地使用 if m[value] == zerovalue {}。详细信息请参见:How to check if a map contains a key in Go?

可以利用地图的这种“属性”来优雅地创建集合。查看How can I create an array that contains unique strings?

使用这种“技术”还有另一个优点:您可以以紧凑的方式检查多个键是否存在(您不能使用特殊的“comma ok”形式来做到这一点)。更多信息:Check if key exists in multiple maps in one condition

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《避免需要冗余检查来映射给定的字符串零值?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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