为了账号安全,请及时绑定邮箱和手机立即绑定

在普通函数上返回像 Golang 中的“ok”这样的地图

在普通函数上返回像 Golang 中的“ok”这样的地图

Go
慕沐林林 2021-09-13 16:29:59
在 Go 中,以下工作(注意地图的一种使用有一个返回,另一个有两个返回)package mainimport "fmt"var someMap = map[string]string { "some key": "hello" }func main() {    if value, ok := someMap["some key"]; ok {        fmt.Println(value)    }    value := someMap["some key"]    fmt.Println(value)}但是,我不知道如何用我自己的函数来做同样的事情。是否有可能有类似的行为和可选的回报map?例如:package mainimport "fmt"func Hello() (string, bool) {    return "hello", true}func main() {    if value, ok := Hello(); ok {        fmt.Println(value)    }    value := Hello()    fmt.Println(value)}无法编译(由于错误multiple-value Hello() in single-value context)...有没有办法使此语法适用于该函数Hello()?
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

map不同,因为它是内置类型而不是函数。访问 a 元素的 2 种形式map由Go 语言规范:索引表达式指定并由编译器支持。


使用函数,您无法做到这一点。如果一个函数有 2 个返回值,您必须“期望”它们两个或根本没有。


但是,您可以将任何返回值分配给空白标识符:


s, b := Hello()    // Storing both of the return values


s2, _ := Hello()   // Storing only the first


_, b3 := Hello()   // Storing only the second

您还可以选择不存储任何返回值:


Hello()            // Just executing it, but storing none of the return values

注意:您也可以将两个返回值分配给空白标识符,尽管它没有用(除了验证它恰好有 2 个返回值):


_, _ = Hello()     // Storing none of the return values; note the = instead of :=

您也可以在Go Playground上尝试这些。


辅助功能


如果您多次使用它并且不想使用空白标识符,请创建一个丢弃第二个返回值的辅助函数:


func Hello2() string {

    s, _ := Hello()

    return s

}

现在你可以这样做:


value := Hello2()

fmt.Println(value)


查看完整回答
反对 回复 2021-09-13
?
守候你守候我

TA贡献1802条经验 获得超10个赞

除了@icza的解释:

  • 我不建议在那里使用辅助函数。特别是如果该Hello功能是您自己的功能。

  • 但是,如果您无法控制它,那么使用助手也可以。

  • 如果是你自己的函数,最好把你函数的签名改一下。也许,你在某个地方犯了一个设计错误。

你也可以这样做:

package main


import "fmt"


func Hello() (string, bool) {

    return "hello", true

}


func main() {

    // Just move it one line above: don't use a short-if

    value, ok := Hello()

    if ok {

        fmt.Println(value)

    }

}


查看完整回答
反对 回复 2021-09-13
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号