本文系第五篇Golang語言學習教程
在Go語言中,“常量”用於表示固定的值。
每種常量的潛在類型都是基礎類型:bool、string、int、float32、float64
比如5
-1
Go is interesting
3.1415
常量定義
一個常量聲明語句定義了常量的名字,和變數的聲明文法類似,用關鍵字const定義常量:
例:
package main import "fmt"func main(){ const pai = 3.141592 //定義常量pai fmt.Println(pai)}
以上程式輸出結果:
3.141592
一個常量只能賦值一次,不能再賦值其他的值。否則報錯cannot assign to pai
例:
package main import "fmt"func main(){ const pai = 3.141592 //定義常量pai pai = 2 fmt.Println(pai)}
所有常量的運算都可以在編譯期完成,並且因為函數調用發生在運行時,所以不能將函數的傳回值賦值給常量:
例:
package main import ( "fmt" "math")func main(){ var a = math.Sqrt(5) //允許將函數的傳回值賦值給變數 a const b = math.Sqrt(5) //不允許將函數的傳回值賦值給常量 b fmt.Println(a,b)}
以上程式中,因為a是變數,所以可以將函數的傳回值賦給a。
b是常量,它的值需要在編譯的時候就確定。而函數的傳回值只會在運行計算,所以以上程式會報錯const initializer math.Sqrt(5) is not a constant
常量類型
常量可以規定類型,也可以不規定類型。
如果不規定類型,那麼它的類型就是不確定的。
例:
package main import ( "fmt")func main(){ const a,b = 3,4 //賦值常量 a,b ,ab沒有類型 var c float64 = a //定義一個類型為float64的變數 c ,賦值a var d complex128 = b //定義一個類型為complex128的變數 d ,賦值b fmt.Printf("c's type is %T,d's type is %T\n",c,d)}
以上程式輸出結果:
c's type is float64,d's type is complex128
以上程式中,將 a,b 分別賦值給變數 c , d 並輸出c,d的類型。
由此可以看出,常量的類型是根據運算式推斷得出。
枚舉類型
普通枚舉類型
package main import "fmt"func main(){ const ( cpp = 0 java = 1 python = 2 golang = 3 ) fmt.Println(cpp, java, python, golang)}
以上程式定義了一個普通的const枚舉類型
自增枚舉類型
例1:
package main import "fmt"func main(){ const ( cpp = iota java python golang javascript perl ) fmt.Println(cpp, java, python, golang, javascript, perl)}
iota常量產生器:用於產生一組相似規則初始化的常量,但不用每行都寫一遍初始設定式。
以上程式中,在const聲明語句中,在第一個常量聲明所在的行,iota被置為0,然後在每一個有常量聲明的行加一。
以上程式輸出結果:
0 1 2 3 4 5
例2:
在複雜的常量運算式中使用iota
package main import "fmt"func main(){ const ( b = 1 <<(10* iota) KB MB GB TB PB EB ) fmt.Println(b, KB, MB, GB, TB, PB, PB, EB)}
左移運算子”<<”是雙目運算子。左移n位就是乘以2的n次方。 其功能把”<<”左邊的運算數的各二進位全部左移若干位,由”<<”右邊的數指定移動的位元,高位丟棄,低位補0。
以上程式中,自增枚舉每一行如下:
b = 1 * 2^(10 * 0)次方
KB = 1 * 2^(10 * 1) = 1 * 2^10 = 1024
MB = 1 * 2^(10 * 2) = 1 * 2^20 = 1048576
......
以上程式輸出結果:
1 1024 1048576 1073741824 1099511627776 1125899906842624 1125899906842624 1152921504606846976
以上為學習Golang常量篇