1、什麼變數 變數來源於數學,從根本上說,變數相當於是對一塊數據存儲空間的命名,程式可以通過定義一個變數來申請一塊數據存儲空間,之後可以通過引用變數名來使用這塊存儲空間。 1.1變數聲明 Go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。 第一種,指定變數類型,聲明後若不賦值,使用默 ...
1、什麼變數
變數來源於數學,從根本上說,變數相當於是對一塊數據存儲空間的命名,程式可以通過定義一個變數來申請一塊數據存儲空間,之後可以通過引用變數名來使用這塊存儲空間。
1.1變數聲明
Go 語言變數名由字母、數字、下劃線組成,其中首個字母不能為數字。
第一種,指定變數類型,聲明後若不賦值,使用預設值。
var v_name v_type v_name = value
第二種,根據值自行判定變數類型。
var v_name = value
第三種,省略var, 註意 :=左側的變數不應該是已經聲明過的,否則會導致編譯錯誤。
v_name := value // 例如 var a int = 10 var b = 10 c : = 10
(冒號和等號的組合:=),用於明確表達同時進行變數聲明和初始化的工作。
1.2、多變數聲明
1、類型相同多個變數, 非全局變數
var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3
2、自動推斷,不需要顯示聲明類型
var vname1, vname2, vname3 = v1, v2, v3 vname1, vname2, vname3 := v1, v2, v3 //出現在:=左側的變數不應該是已經被聲明過的,否則會導致編譯錯誤
3、類型不同多個變數, 全局變數, 局部變數不能使用這種方式
var ( vname1 v_type1 vname2 v_type2 )
實例如下:
package main var x, y int var ( //這種只能出現在全局變數中,函數體內不支持 a int b bool ) var c, d int = 1, 2 var e, f = 123, "hello" //這種不帶聲明格式的只能在函數體中出現 //g, h := 123, "hello" func main(){ g, h := 123, "hello" fmt.Println(g) //輸出變數g fmt.Println(h) //輸出變數h }
1.3、變數賦值與初始化
在變數聲明時,就給變數指定一個值,這個過程叫變數初始化,如:
package main //初始化變數c的值為2;變數d的值為2。 var c, d int = 1, 2 //初始化變數e的值為123;變數f的值為'hello'。 var e, f = 123, "hello" func main(){ //初始化變數g的值為123;變數h的值為'hello'。 g, h := 123, "hello" fmt.Println(g) //輸出變數g fmt.Println(h) //輸出變數h }
在Go語法中,變數初始化和變數賦值是兩個不同的概念。下麵為聲明一個變數之後的賦值過程:
package main import "fmt" func main() { //初始化變數g的值為123;變數h的值為'hello'。 g, h := 123, "hello" g = 234 //將 234 賦值給變數g fmt.Println(g) //輸出變數g fmt.Println(h) //輸出變數h }
1.4、匿名變數
在Go語言中,單個的下劃線“_”是一個特殊的變數,我們稱之為匿名變數(anonymous variable),匿名變數不占用命名空間,不會分配記憶體。匿名變數與匿名變數之間也不會因為多次聲明而無法使用
我們在使用傳統的強類型語言編程時,經常會出現這種情況,即在調用函數時為了獲取一個值,卻因為該函數返回多個值而不得不定義一堆沒用的變數。在Go中這種情況可以通過使用匿名變數來避免從而讓代碼看起來更加的優雅。
假設getTime()函數的定義如下,它返回2個值,分別為hour和minute:
func getTime() (hour, minute int) { return 11,20 }
若只想獲得hour,則:
h,_ := getTime()
2、常量
在Go語言中,常量是指編譯期間就已知且不可改變的值。常量可以是數值類型(包括整型、浮點型和複數類型)、布爾類型、字元串類型等。
2.1、 常量定義
常量的定義格式:
const identifier [type] = value
你可以省略類型說明符 [type],因為編譯器可以根據變數的值來推斷其類型。舉例:
const Pi float64 = 3.14159265358979323846 const zero = 0.0 // 無類型浮點常量 const Pi, zero float32 = 3.14159265, 0.0 // 常量的多重賦值 // Pi = 3.14159265, zero = 0.0, name = "roy", 無類型整型和字元串常量 const Pi, zero, name = 3.14159265, 0.0, "roy"
2.2、枚舉
定義一組常量,在Go語言中叫做枚舉,例如:
const ( Sunday = 0 Monday = 1 Tuesday = 2 Wednesday = 3 Thursday = 4 Friday = 5 Saturday = 6 )
2.3、預定義常量
Go語言預定義常量:true、false和iota。其中true、false是兩個bool類型的值,這個我們在後面的“數據類型”這一節會講到。
iota是一個可以被編譯器修改的常量。在每一個const關鍵字出現時,被重置為0,然後再下一個const出現之前,每出現一次iota,其所代表的數字會自動增加1,舉例:
package main import ( "fmt" ) func main() { const ( Sunday = iota Monday = iota Tuesday = iota Wednesday = iota Thursday = iota Friday = iota Saturday = iota ) const ( a = iota b = iota ) fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday) fmt.Println(a, b) }
以上代碼輸出:
0 1 2 3 4 5 6 0 1