使用var關鍵字能夠建立一個指定類型的變量:express
var i int = 0 var i = 0 var i int
以上三個表達式均是合法的,第三個表達式會將i初始化爲int類型的零值,0;若是i是bool類型,則爲false;i是float64類型,則爲0.0;i爲string類型,則爲"";i爲interface類型,則爲nil;i爲引用類型,則爲nil;若是i是struct,則是將struct中全部的字段初始化爲對應類型的零值。ide
能夠在同一條語句中聲明多個變量:函數
var i, j, k int // int, int, int var b, f, s = true, 2.3, "four" // bool, float64, string
包內可見的變量在main函數開始執行以前初始化,本地變量在函數執行到對應的聲明語句時初始化。oop
變量也能夠經過函數的返回值來初始化:spa
var f, err = os.Open(name) // os.Open returns a file and an error
在函數內部,有一種短聲明的方式,形式是name := expression,這裏,變量的類型是由編譯器自動肯定的。指針
anim := gif.GIF{LoopCount: nframes} freq := rand.Float64() * 3.0 t := 0.0
由於這種形式很是簡潔,所以在函數內部(本地變量)大量使用。若是須要爲本地變量顯式的指定類型,或者先聲明一個變量後面再賦值,那麼應該使用var:code
1 i := 100 // an int 2 var boiling float64 = 100 // a float64 3 var names []string 4 var err error 5 var p Point
就像var聲明同樣,短聲明也能夠並行初始化blog
i, j := 0, 1
要謹記的是,:=是一個聲明,=是一個賦值,所以在須要賦值的場所不能使用 :=ci
1 var i int 2 i := 10//panic : no new variables on left side of :=
能夠利用並行賦值的特性來進行值交換:編譯器
1 i, j = j, i // swap values of i and j
有一點須要注意的:短聲明左邊的變量未必都是新聲明的!
1 in, err := os.Open(path1) //新聲明兩個變量:in, err 2 //... 3 out, err := os.Create(path2) 4 /*由於err已經聲明過,所以這裏只新聲明一個變量out。 5 雖然這裏使用:=,可是err是在上個語句聲明的,這裏僅僅是賦值*/
並且,短聲明的左邊變量必須有一個是新的,若都是以前聲明過的,會報編譯錯誤:
1 f, err := os.Open(infile) 2 // ... 3 f, err := os.Create(outfile) // compile error: no new variables
正確的寫法是這樣的:
1 f, err := os.Open(infile) 2 // ... 3 f, err = os.Create(outfile) // compile ok