常量
定義
常量
是一個簡單值的辨別符,在程式運作時,不會被修改的量。常量使用一個名稱來綁定一塊記憶體位址,該記憶體位址中存放的資料類型由定義常量時指定的類型來決定,并且該記憶體位址裡面存放的值是不可以被改變的,
Go語言中的常量分為:
布爾型
、
字元串類型
數值型
。
常量一般存儲在程式的隻讀段裡。
字面常量
字面常量通常指的是程式中寫死的常量:
如:
66 數值常量
3.1415926 浮點型常量
1.8 + 66i 複數類型的常量
true 布爾類型常量
"cat" 字元串常量
字面常量在Go語言程式中是無類型的,隻要這個常量在相應類型的值域範圍内,就可以做為該類型的常量。比如:66 就可以指派給 :
int
uint
int32
int64
float32
float64
complex64
complex128
等。
常量的定義
Go語言的常量的定義可以限定常量類型,但是也可以不用,它和變量一樣,如果定義的時候,沒有指定類型,那麼程式運作中,會概把字面常量把常量的類型給推導出來。
顯式類型定義
顯示定義常量,就是把常量的類型寫出來。
const PATH string = "http://www.baidu.com" //定義一個百度網址常量字元串
const PI float64 = "3.1415926" //定義一個圓周率的常量
隐式類型定義
隐式寫義常量就是定義的時候不寫類型。
const NAME = "張三" //不寫變量的類型
const SIZE = 1024
Go語言的常量可以定義的時候,右值也可以是一個編譯期的運算的常量表式。如:
const num = 2 << 2
這是因為常量的指派是在編譯期進行的,是以可以出現也是編譯期運作的常量的表達式,但是如果是編譯期值還在變動的是不行的。
批量定義常量
如果我們在定義十多個常量的時候還每一個常量都寫一個
const
的話,那效率真的是太慢了。是以我們有下面的辦法批量定義常量。
const(
a = 1
b = 2
c = 3
)
根據上面的方法,我們可以批量的定義一組常量,并且還好管理,我們可以把同一類型的常量定義到一個const裡面,這樣可以使得代碼更加的清晰。
預定義常量
Go語言裡面預定義了一些常量,如:
true
false
iota
其中
iota
比較特殊,它可以被認為是一個可以被預編譯的常量,在每一個
const
關鍵字出現的時候被重置為0,然後在下一個
const
出現之前,每出現一次
iota
,其所代表的數字都會自動增加1。
//我們一般結合着const()來使用iota
//如些上面的代碼就可以改為
const(
a = iota //0
b = iota //1
c = iota //2
)
這和上面的代碼的效果是一樣的。
也可以這樣寫:
const(
a = iota //0
b //1
c //2
)
這樣可以更加的簡單一點,并且這樣是因為,Go語言裡面如果一組常量裡面,如果某個常量 沒有初始值,那麼預設和上一行一緻。
我們還可以在這裡面運用表達式。
const(
a = 1 << iota //0
b //2
c //4
)
枚舉
在
Go語言
沒有專門來定義
枚舉類型
的關鍵字,是以我們用
枚舉類型
的時候,都是用
常量
來定義的。例:
const(
MONDAY = 1 + iota
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
)
上面是一個星期的枚舉類型的定義。
我的公衆号
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5SNygDMwITOwEDMyIDMy8CXlJXd0lmcw9CXyVGdzFWbvw1dhJ3LcVmc1R3YpBXL512LcJ3YiJWevwVbvNmLlVGdpd2Lc9CX6MHc0RHaiojIsJye.jpg)
細節決定成敗!
個人愚見,如有不對,懇請斧正!