1. 用關鍵詞var進行聲明
var name type = expression
var後面跟着變量名name,變量類型type和變量初始值expression。Go語言帶有零值機制,能夠自動對沒有顯式賦值的變量進行零值初始化。Go語言裏不存在未經初始化的變量。
var s string
fmt.Println(s) // ""
我們也可以同時聲明多個變量。
var i, j, k int // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string
省略類型並同時對多個變量進行顯式初始化,Go會自動從初始值的類型推斷變量的類型。
函數的返回值也可以用來初始化變量。
var f, err = os.Open(name) // os.Open returns a file and an error
2. 簡短變量聲明
簡短變量聲明用於聲明大部分的局部變量。簡短變量聲明可以用這樣的表達式表示。
name := expression
具體的例子如下:
anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.0
t := 0.0
函數返回值也可以用在簡短聲明中。
f, err := os.Open(name)
if err != nil {
return err
}
f.Close()
在多變量的簡短聲明中至少需要有一個變量是沒有聲明過的,這意味着Go允許多個變量中存在已經聲明過的變量。
3. new 內置函數
new(T)表達式可以創建一個類型爲T的無名變量,進行零值初始化後返回變量的地址,即類型*T。
p := new(int) // p, 類型 *int
fmt.Println(*p) // 輸出"0"
*p = 2 // 賦值爲2
fmt.Println(*p) // 輸出“2”
new作爲內置函數,可以在局部被相同名字的變量覆蓋。
func delta(old, new int) int {return new - old}
上面函數內部new是int類型變量,內置函數new無法使用,這在語法上是合法的。
new函數用於初始化出現頻率不高。