變量來(lái)源于數(shù)學(xué),是計(jì)算機(jī)語(yǔ)言中能儲(chǔ)存計(jì)算結(jié)果或能表示值抽象概念。
變量可以通過(guò)變量名訪問(wèn)。
Go 語(yǔ)言變量名由字母、數(shù)字、下劃線組成,其中首個(gè)字符不能為數(shù)字。
聲明變量的一般形式是使用 var 關(guān)鍵字:
var identifier type
可以一次聲明多個(gè)變量:
var identifier1, identifier2 type
以下是一個(gè)實(shí)例:
package main
import "fmt"
func main() {
var a string = "Runoob"
fmt.Println(a)
var b, c int = 1, 2
fmt.Println(b, c)
}
以上實(shí)例輸出結(jié)果為:
Runoob
1 2
變量聲明
第一種,指定變量類型,如果沒(méi)有初始化,則變量默認(rèn)為零值。
var v_name v_type
v_name = value
零值就是變量沒(méi)有做初始化時(shí)系統(tǒng)默認(rèn)設(shè)置的值。
實(shí)例:
package main
import "fmt"
func main() {
// 聲明一個(gè)變量并初始化
var a = "RUNOOB"
fmt.Println(a)
// 沒(méi)有初始化就為零值
var b int
fmt.Println(b)
// bool 零值為 false
var c bool
fmt.Println(c)
}
以上實(shí)例執(zhí)行結(jié)果為:
RUNOOB
0
false
- 數(shù)值類型(包括complex64/128)為 0
- 布爾類型為 false
- 字符串為 ""(空字符串)
- 以下幾種類型為 nil:
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
例子:
package main
import "fmt"
func main() {
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
輸出結(jié)果是:
0 0 false ""
第二種,根據(jù)值自行判定變量類型。
var v_name = value
我們看一個(gè)例子:
package main
import "fmt"
func main() {
var d = true
fmt.Println(d)
}
輸出結(jié)果是:
true
第三種,省略 var, 注意 := 左側(cè)如果沒(méi)有聲明新的變量,就產(chǎn)生編譯錯(cuò)誤,格式:
v_name := value
例如:
var intVal int
intVal :=1 // 這時(shí)候會(huì)產(chǎn)生編譯錯(cuò)誤
intVal,intVal1 := 1,2 // 此時(shí)不會(huì)產(chǎn)生編譯錯(cuò)誤,因?yàn)橛新暶餍碌淖兞?,因?yàn)?:= 是一個(gè)聲明語(yǔ)句
可以將 var f string = "Runoob" 簡(jiǎn)寫為 f := "Runoob":
實(shí)例:
package main
import "fmt"
func main() {
f := "Runoob" // var f string = "Runoob"
fmt.Println(f)
}
輸出結(jié)果是:
Runoob
多變量聲明
//類型相同多個(gè)變量, 非全局變量
var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3
var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要顯示聲明類型,自動(dòng)推斷
vname1, vname2, vname3 := v1, v2, v3 // 出現(xiàn)在 := 左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過(guò)的,否則會(huì)導(dǎo)致編譯錯(cuò)誤
// 這種因式分解關(guān)鍵字的寫法一般用于聲明全局變量
var (
vname1 v_type1
vname2 v_type2
)
實(shí)例
package main
var x, y int
var ( // 這種因式分解關(guān)鍵字的寫法一般用于聲明全局變量
a int
b bool
)
var c, d int = 1, 2
var e, f = 123, "hello"
//這種不帶聲明格式的只能在函數(shù)體中出現(xiàn)
//g, h := 123, "hello"
func main(){
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
}
以上實(shí)例執(zhí)行結(jié)果為:
0 0 0 false 1 2 123 hello 123 hello