注:本文是對golang-101-hacks中文翻譯。
在GO語言中簡短變量聲明是一種非常方便的“聲明變量”方式
short variable declaration is a very convenient manner of "declaring variable" in Go:
i := 10
以下是簡寫方式(注意變量沒有標(biāo)明類型):
It is shorthand of following (Please notice there is no type):
var i = 10
Go編譯器會根據(jù)變量的值來推斷變量的類型。這將帶來極大方便,但另一方面,也帶來了一些陷阱,應(yīng)該注意:
The Go compiler will infer the type according to the value of variable. It is a very handy feature, but on the other side of coin, it also brings some pitfalls which you should pay attention to:
(1)簡短變量聲明格式只能用于函數(shù)體內(nèi)
(1) This format can only be used in functions:
package main
i := 10
func main() {
fmt.Println(i)
}
編譯體會提示如下錯誤
syntax error: non-declaration statement outside function body
(2)必須聲明至少一個新變量:
package main
import "fmt"
func main() {
var i = 1
i, err := 2, true
fmt.Println(i, err)
}
在i, err:= 2, false語句中,只有' err '是一個新聲明的變量,var實際上是在 vari = 1中聲明的。
簡短變量聲明可以隱藏全局變量聲明,它可能不是您想要的,這讓您大吃一驚:
package main
import "fmt"
var i = 1
func main() {
i, err := 2, true
fmt.Println(i, err)
}
' i, err:= 2, true '實際上聲明了一個new local i,這使得global i在' main '函數(shù)中沒有被訪問。使用全局變量,不使用局部變量,正確的解決方法如下:
package main
import "fmt"
var i int
func main() {
var err bool
i, err = 2, true
fmt.Println(i, err)
}