为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕容708150 2021-09-20 20:41:44
假设我有一个功能:func foo() (bool, string) { ... }然后我希望声明两个变量band s,并使用函数调用返回的值进行初始化foo()。我知道我可以使用省略类型注释的“速记”语法来做到这一点:b, s := foo();但是,我不希望使用这种速记语法。我希望使用var带有变量名称和预期类型的语法。我试过这个:var b bool, s string = foo();但是,这给了我一个语法错误。这样做的正确方法是什么?
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

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


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


var b bool

var s string

b, s = foo()

或者


var (

    b bool

    s string

)

b, s = foo()

没有“速记 var”语法。


查看完整回答
反对 回复 2021-09-20
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

你不能那样做。Go Spec 定义了一个变量声明语法如下:


VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .

VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .

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


var b, s = foo()

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


var (

    b bool

    s string

)


func init() {

    b, s = foo()

}


查看完整回答
反对 回复 2021-09-20
  • 2 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信