result, err := some_api(...) // declares and sets `result` and `err`
if err != nil {
// ...
return err
}
if result1, err := some_other_api(...); err != nil { // result1, err are both created afresh,
// visible only in the scope of this block.
// this err shadows err from outer block
return err
}
9条答案
按热度按时间b5lpy0ml1#
是的,您可以:
你可以对内联赋值做一些类似的事情,但不太方便:
3df52oht2#
另一种方法是这样的
也适用于const
rdrgkggo3#
在语言规范方面,这是因为变量是用以下方式定义的:
(From“变量声明”)
一个类型的标识符列表,分配给一个表达式或ExpressionList。
5n0oy7gb4#
是的,你可以,它比看起来稍微微妙一些。
首先,您可以简单地执行以下操作:
可以在函数参数声明中使用相同的语法:
然后是同时声明和赋值变量的简短语法。
Golang中经常遇到的模式是:
所以你可以在
:=
操作符的左边赋值给已经定义好的变量,只要至少有一个被赋值的变量是新的。否则它就不是格式良好的。这很棒,因为它允许我们在多个API调用中重用同一个错误变量,而不必为每个API调用定义一个新的变量。但是要注意以下情况:ercv8c1e5#
有几个答案是不正确的:他们忽略了OP询问是否可以一次性将多个变量设置为相同值的事实(抱歉使用双关语)。
在Go语言中,如果a、B、c是变量,你就不能这样做,也就是说,你必须单独设置每个变量:
但是如果a,b,c是常量,你可以:
62o28rlo6#
试试这个在Playground:https://play.golang.org/
3bygqnnd7#
另一种方法是使用var进行包级赋值
uklbhaso8#
长说明
短宣告
qrjkbowd9#
在分号的帮助下,我们可以实现类似于它。
或
但是playground将格式化没有分号的代码,在源代码文件中没有。