2017-07-13 47 views
1

我在想,如果有一起去的方式來聲明,並在一行中初始化多個不同類型的變量,而無需使用簡短聲明語法:=多個變量(不含短變量聲明語法)

聲明例如相同類型的兩個變量是可能的:

var a, b string = "hello", "world" 

聲明不同類型與:=語法的變量還可以:

c, d, e := 1, 2, "whatever" 

這給了我一個錯誤,而不是:

var f int, g string = 1, "test" 

當然我想保持類型否則我可以使用:=語法。

不幸的是我找不到任何例子,所以我認爲這是不可能的?

如果沒有,任何人都知道是否有計劃在未來的版本中引入這樣的語法?

回答

4

這是可能的,如果你省略類型:

var i, s = 2, "hi" 
fmt.Println(i, s) 

輸出(嘗試在Go Playground):

2 hi 

注意,short variable declaration正是這種簡寫:

A 短變量聲明使用語法:

ShortVarDecl = IdentifierList ":=" ExpressionList . 

這是簡寫形式,定期variable declaration與初始化表達式,但沒有類型:

"var" IdentifierList = ExpressionList . 

沒有忽略這是不可能的類型,因爲variable declaration的語法是:

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

(對於帶表達式列表的標識符列表,只有一種可選類型。)

此外,我想你不會算成1行(否則是有效的語法,但它gofmt分解成多行):

var (i int = 2; s string = "hi") 

此外,如果你只希望能夠明確說明類型,你可以爲他們提供在右側:

var i, s = int(2), string("hi") 

但所有的一切,只需要使用2線2種不同類型,沒有什麼可失去的,可讀性取勝。

+0

是的,我知道,但我當然想保持類型明確,否則我可以只使用':='語法並用=來代替) –

+1

您可以強制轉換類型。 var i,s = int(2),string(「hi」)。 –

+0

@StephenWeinberg,這是我可以生活的東西,我會在一行中具有可讀性和顯式類型,謝謝! –