Go:带有多返回值函数的多变量短声明语句

qyuhtwio  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(88)

是否可以使用多返回值函数调用一次声明多个变量?
我想在for loop multiple variable initialization statement中使用它,但在Go中找不到这样做的方法。
例如,下面的代码段可以工作:

x := "foo"
y, z := fmt.Print("bar")

然而,当我尝试使用短声明语法x, y := "value1", "value2"时,它失败了:

x, y, z := "foo", fmt.Print("bar")

正如我所理解的,编译器试图将函数的两个返回值都分配给第二个变量 y
请告诉我在Golang中这是一种可能的情况,或者我可以在 for 循环初始化语句中使用什么替代方案。

3bygqnnd

3bygqnnd1#

请告知这是一个可能的情况下,在戈朗
不不可能
根据官方语言规范,不允许在赋值中将多值表达式与其他多值或单值表达式组合。关于赋值语句的部分说:
两种形式。在第一个例子中,右手操作数是单个多值表达式**,例如函数调用...在第二种形式中,左边的操作数必须等于右边的表达式的数量,每个表达式必须是单值的
短变量声明是遵循上面引用的赋值语句规则的常规变量声明的简写。
我可以在for循环初始化语句中使用什么替代方法。
您可以将这两条语句 Package 到一个返回3个值的自定义函数中,并在for循环的InitStmt中使用该函数。举例来说:

func f() (string, int, error) {
    x := "foo"
    y, z := fmt.Print("bar")
    return x, y, z
}

for x, y, z := f(); ... {
    // ...
}
alen0pnh

alen0pnh2#

根据文档,fmt.Print返回2个值。所以你不能分配这样的东西。
以下是文档

下面的一个工作,因为你是分配2个值从fmt.Print返回。

x := "foo"
y, z := fmt.Print("bar")

相关问题