当尝试在 Go 中返回多个值时,为什么某些语法有效而其他语法无效,这似乎令人困惑。为了说明这一点,请考虑以下两个代码片段:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
第一个代码片段有效并返回 Info 和 bool 值。但是,第二个片段无效:
func FindUserInfo(id string) (Info, bool) { return all[id] }
这提出了为什么第一个片段有效而第二个片段无效的问题。此外,人们可能想知道是否有一种方法可以避免使用像 it 和present 这样的临时变量。
理解这种行为的关键在于“comma好的”模式。在 Go 中,访问映射时,结果是一对值:与键关联的值和指示该键是否存在于映射中的布尔值。这通常用于区分丢失的键和零值。
在第一个代码片段中,all[id] 表达式返回一对值,这些值被分配给它并存在。然后 return 语句返回这些值。
编译器在确定多值赋值是否有效方面发挥着作用。如果函数返回多个值,但左侧的接收者只有一个变量,编译器将发出错误。这是因为编译器期望返回的值的数量与接收它们的变量的数量相匹配。
在第二个代码片段的情况下,return all[id] 表达式仅返回一个值,这是不兼容的左侧有两个变量。因此,编译器会报告错误。
不幸的是,在 Go 函数中返回多个值时,无法避免使用临时变量。这是因为编译器要求返回值的数量与接收它们的变量的数量相匹配。但是,可以通过使用命名返回值或返回结构来最大限度地减少临时变量的使用。
以上是为什么 Go 函数不能直接返回多个值?的详细内容。更多信息请关注PHP中文网其他相关文章!