【问题标题】:Golang variable assignmentGolang 变量赋值
【发布时间】:2016-08-18 22:49:40
【问题描述】:

当你声明了一个变量而另一个没有声明时,有没有办法将两个变量分配给一个返回两个值的函数。

例如:

var host string
if host, err := func(); err != nil {}

在上面的代码中,host 被声明但 err 没有。除了声明错误之外,我想要一种干净的方法来做到这一点

【问题讨论】:

  • 很确定它会自动执行此操作。 := 如果有新变量,= 如果两者都存在。
  • 如果第二个语句是 if/for 语句。声明的变量“host”是否会保存 func() 返回的值?
  • 简短的回答是你所要求的是不可能的。您还必须声明err

标签: go


【解决方案1】:

在您的示例中,您根本不应该声明主机。没有办法进行这样的部分赋值......要么您使用:=,它是声明和赋值的简写,要么您使用=,而您只进行赋值。我个人很少在 Go 中写 var 这个词。

需要明确的是,如果您有一个已声明的变量以及一个或多个尚未声明的变量,则可以使用:= 对其进行赋值,但反之则不成立。这意味着如果一个或多个左侧值尚未声明,则不能使用 =

【讨论】:

  • 如果第二个语句是 if/for 语句。声明的变量“host”是否会保存 func() 返回的值?
  • @Keeto 会,但是当您这样做时,host 将仅在if 的范围内可用。这是一个关于游戏的例子; play.golang.org/p/3ONeB2D6kH 如您所见,主机不在 if 范围之外。
【解决方案2】:

当你像这样在if 中使用:= 时,你总会得到在if 范围内声明的新变量。在if 之后,host 的值将与之前相同。如果你想这样做,你需要在if之前声明hosterr(并且不要在if中使用:=)。

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2015-05-18
    • 2016-03-26
    • 2021-12-04
    • 2011-05-29
    • 2015-09-19
    相关资源
    最近更新 更多