變量是爲存儲特定類型的值而提供給內存位置的名稱。在go中聲明變量有多種語法。bash
因此變量的本質就是一小塊內存,用於存儲數據,在程序運行過程當中數值能夠改變ide
var名稱類型是聲明單個變量的語法。函數
以字母或下劃線開頭,由一個或多個字母、數字、下劃線組成ui
聲明一個變量spa
第一種,指定變量類型,聲明後若不賦值,使用默認值code
var name type
name = value複製代碼
第二種,根據值自行斷定變量類型(類型推斷Type inference)內存
若是一個變量有一個初始值,Go將自動可以使用初始值來推斷該變量的類型。所以,若是變量具備初始值,則能夠省略變量聲明中的類型。作用域
var name = value複製代碼
第三種,省略var, 注意 :=左側的變量不該該是已經聲明過的(多個變量同時聲明時,至少保證一個是新變量),不然會致使編譯錯誤(簡短聲明)編譯器
name := value
// 例如
var a int = 10
var b = 10
c : = 10複製代碼
這種方式它只能被用在函數體內,而不能夠用於全局變量的聲明與賦值string
示例代碼:
package main
var a = "Hello"
var b string = "World"
var c bool
func main(){
println(a, b, c)
}複製代碼
運行結果:
Hello World false複製代碼
第一種,以逗號分隔,聲明與賦值分開,若不賦值,存在默認值
var name1, name2, name3 type
name1, name2, name3 = v1, v2, v3複製代碼
第二種,直接賦值,下面的變量類型能夠是不一樣的類型
var name1, name2, name3 = v1, v2, v3複製代碼
第三種,集合類型
var (
name1 type1
name2 type2
)複製代碼
變量必須先定義才能使用
go語言是靜態語言,要求變量的類型和賦值的類型必須一致。
變量名不能衝突。(同一個做用於域內不能衝突)
簡短定義方式,左邊的變量名至少有一個是新的
簡短定義方式,不能定義全局變量。
變量的零值。也叫默認值。
變量定義了就要使用,不然沒法經過編譯。
若是在相同的代碼塊中,咱們不能夠再次對於相同名稱的變量使用初始化聲明,例如:a := 20 就是不被容許的,編譯器會提示錯誤 no new variables on left side of :=,可是 a = 20 是能夠的,由於這是給相同的變量賦予一個新的值。
若是你在定義變量 a 以前使用它,則會獲得編譯錯誤 undefined: a。若是你聲明瞭一個局部變量卻沒有在相同的代碼塊中使用它,一樣會獲得編譯錯誤,例以下面這個例子當中的變量 a:
func main() {
var a string = "abc"
fmt.Println("hello, world")
}複製代碼
嘗試編譯這段代碼將獲得錯誤 a declared and not used
此外,單純地給 a 賦值也是不夠的,這個值必須被使用,因此使用
在同一個做用域中,已存在同名的變量,則以後的聲明初始化,則退化爲賦值操做。但這個前提是,最少要有一個新的變量被定義,且在同一做用域,例如,下面的y就是新定義的變量
package main
import (
"fmt"
)
func main() {
x := 140
fmt.Println(&x)
x, y := 200, "abc"
fmt.Println(&x, x)
fmt.Print(y)
}複製代碼
運行結果:
0xc04200a2b0
0xc04200a2b0 200
abc複製代碼