在 Go 中返回多个值:了解细微的限制
在 Go 中,返回多个值允许您从单个函数返回多个结果。然而,并非所有多次返回场景都被认为是有效的。让我们探讨一下此规则的约束条件和一个值得注意的例外。
为什么两个返回值示例有效
您提供的示例:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
是有效的,因为它遵循“逗号 ok”模式。这个习惯用法专门在访问映射键时使用:
mapValue, ok := map[key]
为了检索映射值和“ok”状态,我们必须将它们分配给变量。编译器理解“it”和“present”变量用于解构映射索引操作的结果。
为什么一个返回值示例无效
相比之下,以下示例:
func FindUserInfo(id string) (Info, bool) { return all[id] }
无效,因为它不会破坏地图索引操作。这会导致返回值单一,与函数指定的返回类型不兼容。
不可能避免临时变量
目前还不可能在这种特定情况下可以避免临时变量。 “comma ok”习惯用法需要将解构值显式分配给变量。
结论
理解 Go 中多个返回值的细微差别至关重要。虽然“comma ok”模式允许多个返回值,但它仅限于映射索引、通道检索和类型断言。因此,在您的情况下,当从地图索引操作返回值和“ok”状态时,临时变量是必要的。
以上是为什么在 Go 中我无法在不解构的情况下返回多个值?的详细内容。更多信息请关注PHP中文网其他相关文章!