2016-08-18 190 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中不要使用:=)。