如何在 Go 中声明由返回多个值的函数调用实例化的多个变量?

How do I declare multiple variables instantiated by a function call returning multiple values in Go?

假设我有一个函数:

func foo() (bool, string) { ... }

然后我希望声明两个变量 bs,用函数调用 foo() 返回的值初始化。我知道我可以使用省略类型注释的 "shorthand" 语法来做到这一点:

b, s := foo();

但是,我不想使用这种 shorthand 语法。我希望使用带有变量名和预期类型的​​ var 语法。我试过这个:

var b bool, s string = foo();

但是,这给了我一个语法错误。正确的做法是什么?

在大多数情况下,正确的方法是使用 shorthand 语法。这就是它的用途。

如果你不想使用shorthand语法,那么你可以使用var语法:

var b bool
var s string
b, s = foo()

var (
    b bool
    s string
)
b, s = foo()

没有 "shorthand var" 语法。

你不能那样做。 Go 规范定义了一个 variable declaration 语法如下:

VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .

IdentifierList 中的变量只能有一个 Type 或 none。你能做的最好的是

var b, s = foo()

或者,如果您希望它们位于包的顶层,

var (
    b bool
    s string
)

func init() {
    b, s = foo()
}