《Go語言四十二章經(jīng)》第四章 常量

《Go語言四十二章經(jīng)》第四章 常量

作者:李驍

4.1 常量以及iota

常量使用關(guān)鍵字 const 定義门岔,用于存儲不會改變的數(shù)據(jù)。常量不能被重新賦予任何值。
存儲在常量中的數(shù)據(jù)類型只可以是布爾型肪获、數(shù)字型(整數(shù)型、浮點型和復(fù)數(shù))和字符串型柒傻。
常量的定義格式:const identifier [type] = value孝赫,例如:

const Pi = 3.14159

在 Go 語言中,你可以省略類型說明符 [type]红符,因為編譯器可以根據(jù)變量(常量)的值來推斷其類型青柄。

顯式類型定義: const b string = "abc"
隱式類型定義: const b = "abc"

Go的常量定義可以限定常量類型,但不是必需的预侯。如果定義常量時沒有指定類型致开,那么它與字面常量一樣,是無類型(untyped)常量萎馅。一個沒有指定類型的常量被使用時双戳,會根據(jù)其使用環(huán)境而推斷出它所需要具備的類型。換句話說糜芳,未定義類型的常量會在必要時刻根據(jù)上下文來獲得相關(guān)類型飒货。

字面常量(literal),是指程序中硬編碼的常量峭竣,如:-12膏斤。它們的值即為它們本身,是無法被改變的邪驮。

常量的值必須是能夠在編譯時就能夠確定的;你可以在其賦值表達式中涉及計算過程傲茄,但是所有用于計算的值必須在編譯期間就能獲得毅访。

Go語言預(yù)定義了這些常量: true、 false和iota盘榨。布爾常量只包含兩個值:true 和 false喻粹。iota比較特殊,可以被認(rèn)為是一個可被編譯器修改的常量草巡,在每一個const關(guān)鍵字出現(xiàn)時被重置為0守呜,然后在下一個const出現(xiàn)之前,每出現(xiàn)一次iota,其所代表的數(shù)字會自動增1查乒。

在這個例子中弥喉,iota 可以被用作枚舉值:

const (
    a = iota
    b = iota
    c = iota
)

第一個 iota 等于 0,每當(dāng) iota 在新的一行被使用時玛迄,它的值都會自動加 1由境;所以 a=0, b=1, c=2 可以簡寫為如下形式:

const (
    a = iota
    b
    c
)

注意:

const (
    a = iota
    b = 8
    c
)

a, b, c分別為0, 8, 8,新的常量b聲明后蓖议,iota 不再向下賦值虏杰,后面常量如果沒有賦值,則繼承上一個常量值勒虾。

可以簡單理解為在一個const塊中纺阔,每換一行定義個常量,iota 都會自動+1修然。

( 關(guān)于 iota 的使用涉及到非常復(fù)雜多樣的情況 租副,這里不展開來講了帚湘,有興趣可以查查資料研究)

iota 也可以用在表達式中,如:iota + 50。在每遇到一個新的常量塊或單個常量聲明時久橙, iota 都會重置為 0( **簡單地講,每遇到一次 const 關(guān)鍵字恐疲,iota 就重置為 0 ** )草则。

使用位左移與 iota 計數(shù)配合可優(yōu)雅地實現(xiàn)存儲單位的常量枚舉:

type ByteSize float64
const (
    _ = iota // 通過賦值給空白標(biāo)識符來忽略值
    KB ByteSize = 1<<(10*iota)
    MB
    GB
    TB
    PB
    EB
    ZB
    YB
)

數(shù)值常量(Numeric constants)包括整數(shù),浮點數(shù)以及復(fù)數(shù)常量雄妥。數(shù)值常量有一些微妙之處最蕾。

package main

import (
    "fmt"
)

func main() {
    const a = 5
    var intVar int = a
    var int32Var int32 = a
    var float64Var float64 = a
    var complex64Var complex64 = a
    fmt.Println("intVar", intVar, "\nint32Var", int32Var, "\nfloat64Var", float64Var, "\ncomplex64Var", complex64Var)
}
程序輸出
intVar 5 
int32Var 5 
float64Var 5 
complex64Var (5+0i)

在這個程序中,a 的值是 5 并且 a 在語法上是泛化的(它既可以表示浮點數(shù) 5.0老厌,也可以表示整數(shù) 5瘟则,甚至可以表示沒有虛部的復(fù)數(shù) 5 + 0i),因此 a 可以賦值給任何與之類型兼容的變量枝秤。像 a 這種數(shù)值常量的默認(rèn)類型可以想象成是通過上下文動態(tài)生成的醋拧。

當(dāng)然,常量之所以為常量就是恒定不變的量淀弹,因此我們無法在程序運行過程中修改它的值丹壕;如果你在代碼中試圖修改常量的值則會引發(fā)編譯錯誤。同時薇溃,在const 定義中菌赖,對常量名沒有強制要求全部大寫,不過我們一般都會全部字母大寫沐序,以便閱讀琉用。

本書《Go語言四十二章經(jīng)》內(nèi)容在github上同步地址:https://github.com/ffhelicopter/Go42
本書《Go語言四十二章經(jīng)》內(nèi)容在簡書同步地址: http://www.reibang.com/nb/29056963

雖然本書中例子都經(jīng)過實際運行堕绩,但難免出現(xiàn)錯誤和不足之處,煩請您指出邑时;如有建議也歡迎交流奴紧。
聯(lián)系郵箱:roteman@163.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刁愿,隨后出現(xiàn)的幾起案子绰寞,更是在濱河造成了極大的恐慌,老刑警劉巖铣口,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤钱,死亡現(xiàn)場離奇詭異,居然都是意外死亡脑题,警方通過查閱死者的電腦和手機件缸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叔遂,“玉大人他炊,你說我怎么就攤上這事∫鸭瑁” “怎么了痊末?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哩掺。 經(jīng)常有香客問我凿叠,道長,這世上最難降的妖魔是什么嚼吞? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任盒件,我火速辦了婚禮,結(jié)果婚禮上舱禽,老公的妹妹穿的比我還像新娘炒刁。我一直安慰自己,他們只是感情好誊稚,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布翔始。 她就那樣靜靜地躺著,像睡著了一般里伯。 火紅的嫁衣襯著肌膚如雪绽昏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天俏脊,我揣著相機與錄音,去河邊找鬼肤晓。 笑死爷贫,一個胖子當(dāng)著我的面吹牛认然,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漫萄,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼卷员,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了腾务?” 一聲冷哼從身側(cè)響起毕骡,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岩瘦,沒想到半個月后未巫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡启昧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年叙凡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片密末。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡握爷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出严里,到底是詐尸還是另有隱情新啼,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布刹碾,位于F島的核電站燥撞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏教硫。R本人自食惡果不足惜叨吮,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞬矩。 院中可真熱鬧茶鉴,春花似錦、人聲如沸景用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伞插。三九已至割粮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間媚污,已是汗流浹背舀瓢。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留耗美,地道東北人京髓。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓航缀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親堰怨。 傳聞我的和親對象是個殘疾皇子芥玉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容