在Golang的正常function中返回像“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) }
但是,我不知道如何用我自己的function做同样的事情。 是否有可能具有类似的行为与可选返回像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
的错误multiple-value Hello() in single-value context
)…有没有办法让这个语法工作的函数Hello()
?
map
是不同的,因为它是一个内置的types,而不是一个function。 访问map
元素的两种forms由Go Language Specification:Index Expressions指定 。
有了function,你不能这样做。 如果一个函数有2个返回值,你必须“期待”他们两个或根本没有。
但是,您可以将任何返回值分配给空白标识符 :
s, b := Hello() // Storing both of the return values s2, _ := Hello() // Storing only the first _, b3 := Hello() // Storing only the second
您也可以select不存储任何返回值:
Hello() // Just executing it, but storing none of the return values
注意:你也可以将两个返回值赋给空白标识符,虽然它没有用(除了validation它有2个返回值):
_, _ = Hello() // Storing none of the return values; note the = instead of :=
你也可以在Go Playground上试试这些。
助手function
如果您多次使用它并且不想使用空白标识符,请创build一个辅助函数,该函数会丢弃第二个返回值:
func Hello2() string { s, _ := Hello() return s }
现在你可以做:
value := Hello2() fmt.Println(value)