Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回像';ok';关于正规函数的Golang_Go_Return Value_Multiple Return Values - Fatal编程技术网

返回像';ok';关于正规函数的Golang

返回像';ok';关于正规函数的Golang,go,return-value,multiple-return-values,Go,Return Value,Multiple Return Values,在Go中,以下工作(注意,地图的一次使用有一次返回,另一次有两次返回) 然而,我不知道如何用我自己的函数做同样的事情。是否可以使用类似于map的可选返回进行类似的操作 例如: package main import "fmt" func Hello() (string, bool) { return "hello", true } func main() { if value, ok := Hello(); ok { fmt.Println(value)

在Go中,以下工作(注意,地图的一次使用有一次返回,另一次有两次返回)

然而,我不知道如何用我自己的函数做同样的事情。是否可以使用类似于
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)
}

无法编译(由于单值上下文中的错误
多值Hello()
)。。。是否有办法使此语法适用于函数
Hello()

map
不同,因为它是内置类型而不是函数。访问
映射
元素的两种形式由指定

对于函数,您不能这样做。如果一个函数有两个返回值,则必须同时“期望”这两个值或根本不期望

但是,您可以将任何返回值指定给:

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

Hello()            // Just executing it, but storing none of the return values
_, _ = Hello()     // Storing none of the return values; note the = instead of :=

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

你也可以在网上试试这些

辅助功能

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

func Hello2() string {
    s, _ := Hello()
    return s
}
现在你可以做:

value := Hello2()
fmt.Println(value)

除了@icza的解释外:

  • 我不建议在那里使用helper函数。特别是如果
    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)
    }
}

我也有同样的怀疑,但不确定,因为我在谷歌搜索文档/最终答案时遇到了麻烦。感谢您对文档的参考!
value := Hello2()
fmt.Println(value)
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)
    }
}