程序开发 · 2024年7月25日

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

当前位置: > > > > 避免需要冗余检查来映射给定的字符串零值?

来源:stackoverflow
2024-04-29 09:42:35
0浏览
收藏

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

问题内容

我们有一个 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")
}

它输出(在上尝试):

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

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

可以利用地图的这种“属性”来优雅地创建集合。查看

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

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