在go語言中,常量是指編譯期間就已知且不可改變的值。常量可以是數值型別(包括整型、浮點型和複數型別)、布林型別、字串型別等。
字面常量
是指程式中硬編碼的常量。go語言的字面常量是無型別的。只要這個常量在相應型別的值域範圍內,就可以作為該型別的常量。
常量定義
通過const關鍵字,可以給字面常量指定乙個友好的名字:
constpifloat64
=3.1415926
constzero
=0.0
//無型別浮點常量
const(
sizeint64
=1024
eof=-1//無型別整型常量
)
constu,vfloat32=0
,3//u
=0.0,v=
3.0,常量的多重賦值
constgo的常量定義可以限定常量型別,但不是必需的。如果定義常量時沒有指定型別,那麼它與字面常量一樣,是無型別常量。a,b,c=
3,4,
"foo"
//無型別整型和字串常量
常量定義的右值也可以是乙個在編譯期運算的常量表示式,比如const mask = 1 << 3
由於常量的賦值是乙個編譯期行為,所以右值不能出現任何需要執行期才能得出結果的表示式,比如試圖以如下方式定義常量就會導致編譯錯誤:
const home = os.getenv("home")
原因很簡單,os.getenv()只有在執行期才能知道返回結果,在編譯期並不能確定,所以無法作為常量定義的右值。
預定義常量
go語言預定義了這些常量:true、false、iota
iota比較特殊,可以被認為是乙個可被編譯器修改的常量,在每乙個const關鍵字出現時被重置為0,然後在下乙個const出現之前,每出現一次iota,其所代表的數字會自動增1.
從以下的例子可以理解iota的用法:
const(//iota
reset
to0
c0=iota
//c0
==0
c1=iota
//c1
==1
c2=iota
//c2
==2
)
const(
a=1<<
iota//a
==1
b=1<<
iota//b
==2
c=1<<
iota//c
==4
)
const(
u=iota*42
//u==0
vfloat64
=iota*42
//v==42.0
w=iota*42
//w==84
)
constx=iota//x
==0
consty=如果兩個const的賦值語句的表示式是一樣的,那麼可以省略後乙個賦值表示式。因此,上面前兩個const語句可簡寫為:iota//y
==0
const(
c0=iota
c1
c2
)
const(
a=1<<
iota
b
c
)列舉
列舉指一系列相關的常量。go語言中我們可以用在const後跟一對圓括號的方式定義一組常量。
const(
sunday=iota
monday
tuesday
wednesday
thursday
friday
saturday
numberofdays
)同go語言的其他符號(symbol)一樣,以大寫字母開頭的常量在包外可見。
以上例子中numberofdays為包內私有,其他符號則可被其他包訪問。
Go 語言常量
常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。常量中的資料型別只可以是布林型 數字型 整數型 浮點型和複數 和字串型。const identifier type value 顯式型別定義 const b string abc 隱式型別定義 const b abc const name1,...
Go 語言常量
常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。常量中的資料型別只可以是布林型 數字型 整數型 浮點型和複數 和字串型。常量的定義格式 package main import fmt 常量的資料型別 只可以是布林型 數字型 整數型 浮點型 複數 字串型 func main 多個常量的應用 ...
Go 語言常量
常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。常量中的資料型別只可以是布林型 數字型 整數型 浮點型和複數 和字串型。常量的定義格式 package main import fmt 常量的資料型別 只可以是布林型 數字型 整數型 浮點型 複數 字串型 func main 多個常量的應用 ...