一尘不染

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

go

在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()


阅读 280

收藏
2020-07-02

共1个答案

一尘不染

map有所不同,因为它是内置 类型
而不是函数。Go语言规范:索引表达式map指定了访问a元素的2种形式。

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

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

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

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

_, _ = 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)
2020-07-02