使用正常功能在Golang中返回类似“ ok”的地图

在Go中,以下工作(请注意,地图的一种使用有一个收益,另一种有两个收益)


package main


import "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)

}

但是,我不知道如何使用自己的功能执行相同的操作。是否可能具有类似的行为,并带有可选的return map?


例如:


package main


import "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()?


MMMHUHU
浏览 1013回答 2
2回答

慕沐林林

map有所不同,因为它是内置类型而不是函数。Go语言规范:索引表达式map指定了访问a元素的2种形式。使用功能,您将无法做到这一点。如果一个函数有2个返回值,则必须“期望”这两个值或根本没有。但是,您可以将任何返回值分配给Blank标识符:s, b := Hello()    // Storing both of the return valuess2, _ := Hello()   // Storing only the first_, b3 := Hello()   // Storing only the second您还可以选择不存储任何返回值:Hello()            // Just executing it, but storing none of the return values注意:您也可以将两个返回值都分配给空白标识符,尽管它没有用(除了验证它确实有两个返回值):_, _ = 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)

浮云间

除了对@icza的解释之外:我不建议在那里使用辅助功能。特别是如果Hello函数是您自己的函数。但是,如果您无法控制它,那么可以使用帮助程序。如果是您自己的函数,最好更改函数的签名。可能是您在某个地方犯了设计错误。您也可以这样做:package mainimport "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)    }}
打开App,查看更多内容
随时随地看视频慕课网APP