2016-08-18 186 views
0

有一种方法可以将两个变量分配给一个函数,该函数在您声明了一个变量而另一个变量未声明时返回两个值。Golang变量赋值

例如:

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

在上面的代码中,主机被声明,但ERR不是。我想要一个干净的方式来做到这一点,而不是声明err

+0

很确定它会自动做到这一点。 :=是否存在新变量,=是否存在。 – Puzzle84

+0

如果第二条语句是if/for语句。声明变量“host”是否保存func()返回的值? – Keeto

+0

简答题就是你所要求的是不可能的。你还必须声明'err'。 – Endophage

回答

5

在你的例子中,你根本不应该声明主机。没有办法做这样的部分分配......您可以使用:=这个简短的声明和分配,或者你使用=,而你只是在分配任务。我个人很少在Go中写下var这个词。

要说清楚的是,如果您有一个变量已经被一个或多个未声明的变量声明,那么允许您使用:=进行赋值,但反之并不正确。含义如果一个或多个左侧值尚未被声明,则不能使用=

+0

如果第二条语句是if/for声明。声明变量“host”是否保存func()返回的值? – Keeto

+0

@Keeto它会,但是当你这样做时,'host'只会在'if'的范围内可用。这是一个关于比赛的例子。 https://play.golang.org/p/3ONeB2D6kH 正如你可以看到主机不在范围之外的if。 – evanmcdonnal

1

当您在if这样的情况下使用:=时,您将始终获得在if范围内声明的新变量。在if之后,host的值将与以前相同。如果要执行此操作,则需要在if之前声明hosterr(并且在if中不要使用:=)。