這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Go
語言中可以使用“:=
”為一個新的變數完成聲明以及初始化的工作,如下例所示:
i := 1
等價於:
var i = 1
要注意語句中沒有變數類型,不是var i int = 1
。
“:=
”不能重新聲明一個已經聲明過的變數,如下例所示:
package mainimport "fmt"func main() { var i = 1 i := 2 fmt.Println(i)}
編譯結果:
C:/Go\bin\go.exe run C:/Work/go_work/Hello.go# command-line-arguments.\Hello.go:8: no new variables on left side of :=
錯誤的原因是變數被重複聲明了。
但使用“:=
”為多個變數賦值時,如果引入了至少一個新的變數,編譯是可以通過的,如下例所示:
package mainimport "fmt"func main() { var i = 1 i, err := 2, false fmt.Println(i, err)}
編譯執行:
C:/Go\bin\go.exe run C:/Work/go_work/Hello.go2 false
要注意這個時候,並沒有重新聲明“i
”變數,只是為之前聲明的“i
”變數賦值。
“:=
”只能用在函數體中。它的一個重要用途是用在“if
”,“for
”和“switch
”語句的初始化,使變數成為一個“臨時變數”,也就是變數的範圍僅限於這條語句。如下例所示:
package mainimport "fmt"func main() { for j := 3; j <= 5; j++ { fmt.Println(j) } fmt.Println(j)}
編譯結果:
C:/Go\bin\go.exe run C:/Work/go_work/Hello.go# command-line-arguments.\Hello.go:11: undefined: j
“j
”的聲明範圍僅限於“for
”語句,所以編譯第二個列印語句會出錯。
參考資料:
(1)Short variable declarations;
(2)Assignment operator in Go language。