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