返回像';ok';关于正规函数的Golang
在Go中,以下工作(注意,地图的一次使用有一次返回,另一次有两次返回) 然而,我不知道如何用我自己的函数做同样的事情。是否可以使用类似于返回像';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)
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)
}
}