在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()
?
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句