2 回答

TA贡献1757条经验 获得超8个赞
map不同,因为它是内置类型而不是函数。访问 a 元素的 2 种形式map由Go 语言规范:索引表达式指定并由编译器支持。
使用函数,您无法做到这一点。如果一个函数有 2 个返回值,您必须“期望”它们两个或根本没有。
但是,您可以将任何返回值分配给空白标识符:
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
注意:您也可以将两个返回值分配给空白标识符,尽管它没有用(除了验证它恰好有 2 个返回值):
_, _ = 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)

TA贡献1802条经验 获得超10个赞
除了@icza的解释:
我不建议在那里使用辅助函数。特别是如果该
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)
}
}
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报