變量
Go 是靜態(tài)類型語言,不能在運(yùn)行期改變變量類型。使用關(guān)鍵字 var 定義變量,自動(dòng)初始化為零值。如果提供初始化值,可省略變量類型,由編譯器自動(dòng)推斷。
var x int
var f float32 = 1.6
var s = "abc"
在函數(shù)內(nèi)部,可用更簡略的 ":=" 方式定義變量。
func main() {
x := 123 // 注意檢查,是定義新局部變量,還是修改全局變量。該方式容易造成錯(cuò)誤。
}
可一次定義多個(gè)變量。
var x, y, z int
var s, n = "abc", 123
var (
a int
b float32
)
func main() {
n, s := 0x1234, "Hello, World!"
println(x, s, n)
}
多變量賦值時(shí),先計(jì)算所有相關(guān)值,然后再從左到右依次賦值。
data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)
特殊只寫變量 "_",用于忽略值占位。
func test() (int, string) {
return 1, "abc"
}
func main() {
_, s := test()
println(s)
}
編譯器會(huì)將未使用的局部變量當(dāng)做錯(cuò)誤。
var s string // 全局變量沒問題。
func main() {
i := 0 // Error: i declared and not used。(可使用 "_ = i" 規(guī)避)
}
注意重新賦值與定義新同名變量的區(qū)別。
s := "abc"
println(&s)
s, y := "hello", 20 // 重新賦值: 與前 s 在同一層次的代碼塊中,且有新的變量被定義。
println(&s, y) // 通常函數(shù)多返回值 err 會(huì)被重復(fù)使用。
{
s, z := 1000, 30 // 定義新同名變量: 不在同一層次代碼塊。
println(&s, z)
}
// 輸出:
0x2210230f30
0x2210230f30 20
0x2210230f18 30