常量
常量和C#中的概念相同,在編譯期被創建。因為在編譯期必須確定其值,因此在聲明常量時有一些限制。
- 其類型必須是:數值、字符串、布爾值
- 表達式必須是在編譯期可計算的
- 聲明常量的同時必須進行初始化,其值不可再次修改
Doc
- http://golang.org/doc/go_spec.html#Constants
- http://golang.org/doc/go_spec.html#Constant_expressions
- http://golang.org/doc/go_spec.html#Constant_declarations
- http://golang.org//doc/go_spec.html#Iota
語法
const關鍵字用於聲明常量 const [(] 名稱 [數據類型] = 表達式 [)] const ( 多個常量名稱 [數據類型]= 對應的多個表達式 )
如果定義多行常量而表達式一致時可省略其他行的表達式
聲明時如果不指定數據類型,則該常量為無類型常量
const Pi = 3.14159265358 //float64
Pi=3.1415
編譯錯誤: cannot assign to Pi, 變量名Pi已經被使用這里是無法再次給Pi賦值的
const a, b, c = 1, false, "str" //多重賦值
一次可以聲明多個常量,且同時賦值,其類型可以不一致
const d = 1 << 2 //需計算的表達式
復制可以是一個可以在編譯期計算出結果的表達式
const ( //批量聲明
Monday, Tuesday, Wednesday = 1, 2, 3
Thursday, Friday, Saturday = 4, 5, 6
)
批量聲明多個常量
const e, f float64 = 1, 2 / 1.0
聲明多個變量時,指定其數據類型,此時 e和f均是float64數據類型
const g int ,h float64 = 1,2/1.0
不能分別指定數據類型,數據類型后面需要跟着 '=',編譯錯誤: syntax error: unexpected comma, expecting =
iota
在Go中使用另一個常量iota計數器,只能在常量的表達式中使用。 iota在const關鍵字出現時將被重置為0(const內部的第一行之前),const中每新增一行常量聲明將使iota計數一次(iota可理解為const語句塊中的行索引)。使用iota能簡化定義,在定義枚舉時很有用。
fmt.Println(iota)
iota只能在const內部使用。編譯錯誤: undefined: iota
const a = iota // a=0
const (
b = iota //b=0
c //c=1
)
iota從0開始計數
const (
bit00 uint32 = 1 << iota //bit00=1
bit01 //bit01=2
bit02 //bit02=4
)
iota可在表達式中(b=iota也是表達式)
const (
loc0, bit0 uint32 = iota, 1 << iota //loc0=0,bit0=1
loc1, bit1 //loc1=1,bit1=2
loc2, bit2 //loc2=2,bit2=4
)
const (
e, f, g = iota, iota, iota //e=0,f=0,g=0
)
在同一行,iota相同
const (
h = iota //h=0
i = 100 //i=100
j //j=100
k = iota //k=3
)
雖然只使用了兩次iota,但每新起一行iota都會計數