登录
首页 >  Golang >  Go问答

在 Go 中是否可以有条件地实现逗号分隔可选习惯,例如在地图查找中?

来源:stackoverflow

时间:2024-02-06 22:45:23 453浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《在 Go 中是否可以有条件地实现逗号分隔可选习惯,例如在地图查找中?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

在 golang 中,您可以使用明显的语法从映射中获取键:

somemap := map[string]string{
   //... contents
}

value := somemap["key1"]
// if "key1" exists in somemap, then the value will be returned; else empty string.

问题:您无法区分丢失的键和合法的空字符串值

因此,您可以使用逗号 ok 习惯用法来测试是否存在

value, ok := somemap["key1"]
if ok {
   // we know that "key1" was in the map, even if value is empty string
} else {
   // we know that "key1" was not in the map
}

看起来是地图查找方法有两种不同的重载,一种仅返回单个地图 value 结果,另一种返回 (value, bool) 结果,并且编译器似乎根据您所说的希望接收的返回值数量来选择重载。

这非常好,我想知道是否可以在我自己的函数上实现它?

例如:

func fetchValue() (string, bool) {
    return "", true
}

func testMain() {
    // This works fine, as expected
    val, ok := fetchValue()
    if ok {
        fmt.Println(val)
    }

    // COMPILE ERROR: Assignment count mismatch: 1 = 2.
    val2 := fetchValue()
}

// COMPILE ERROR: fetchValue redeclared in this package
func fetchValue() string {
    return ""
}

这可能吗?或者它是只适用于内置 map 类型而没有其他类型的秘密特殊语言酱?


正确答案


您不能定义自己的函数,有时返回 2 个值,有时返回 1 个值。

你可以这样做:

val, ok := fetchvalue()
if !ok {
    // failure path.
}

val, _ := fetchValue()
// not checking for failure.

今天关于《在 Go 中是否可以有条件地实现逗号分隔可选习惯,例如在地图查找中?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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