Go語言的常量與變量使用注意事項

一搞隐、變量

Go是靜態(tài)類型讼庇,不能在運行期改變變量的類型姻采。

面試題

關(guān)于全局變量的初始化,下面正確的使用方式是
A型诚、var i int = 10
B客燕、var i = 10
C、i := 10

這是一個關(guān)于Go語言全局變量聲明和賦值的考察俺驶,Go語言中的變量聲明使用關(guān)鍵字var幸逆,例如:

var str string    //聲明變量
str = "test"      //給變量賦值

這邊var是定義變量的關(guān)鍵字,str是變量名稱暮现,string是變量類型还绘,=是賦值符號,"test"是值栖袋。上面的程序分兩步拍顷,第一步聲明變量,第二步給變量賦值塘幅。也可以將兩步合到一起昔案。

var str string = "test"

使用關(guān)鍵字 var 定義變量,自動初始化為零值电媳。如果提供初始化值踏揣,可省略變量類型,由編譯器自動推斷:

var str = "test"

Go語言還提供了一種更簡短的寫法:

str := "test"

相當(dāng)于先執(zhí)行了var str string定義了str變量匾乓,再執(zhí)行str = "test"的賦值操作捞稿。

Go語言全局變量不支持在函數(shù)外進行賦值,如:

var str string  //定義了一個全局變量str
str = "test"    //全局變量不支持這種操作

因此拼缝,全局變量不支持 str := "test"操作娱局,此方法只支持局部變量操作。

func main() {
    x := 123 // 注意檢查咧七,是定義新局部變量衰齐,還是修改全局變量。該?  >方式容易造成錯誤继阻。
 }

可一次定義多個變量:

var x, y, z int
var s, n = "abc", 123
var (
    a int
    b float32
)
func main() {
  i, s := 123, "Hello, World!"
  println(x, s, n)
}

多變量賦值時耻涛,先計算所有相關(guān)值,然后再從左到右依次賦值瘟檩。

data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100 // (i = 0) -> (i = 2), (data[0] = 100)

全局變量還支持若某個變量需要依賴其它變量犬第,則被依賴的變量先初始化

var test1 = test2
var test2 = "test2"

二、常量

常量值必須是編譯期可確定的數(shù)字芒帕、字符串歉嗓、布爾值。

const x, y int = 1, 2 // 多常量初始化
const s = "Hello, World!" // 類型推斷
const ( // 常量組
  a, b = 10, 100
  c bool = false
)

Go語言中當(dāng)定義一個局部變量未使用會編譯錯誤背蟆,但是局部常量未使用不會引發(fā)編譯錯誤鉴分。

在常量組中,如不提供類型和初始化值带膀,那么視作與上一常量值相同志珍。

const (
  s = "abc"
  x           // x = "abc"
)

常量值還可以是 len、cap垛叨、unsafe.Sizeof 等編譯期可確定結(jié)果的函數(shù)返回值伦糯。

const (
  a = "abc"
  b = len(a)
  c = unsafe.Sizeof(b)
)

如果常量類型足以存儲初始化值,那么不會引發(fā)溢出錯誤。

const (
  a byte = 100 // int to byte
  b int = 1e20 // float64 to int, overflows
)

面試題:

對于常量定義zero(const zero = 0.0)敛纲,zero是浮點型常量喂击,這一說話時候正確。(false)

Go語言常量有個不同尋常的地方淤翔,雖然一個常量可以有任意一個確定的類型翰绊,例如int或float64,但是很多常量卻并沒有一個明確的基礎(chǔ)類型旁壮,編譯器為這些沒有明確的基礎(chǔ)類型的數(shù)字變量提供了比基礎(chǔ)類型更高的算術(shù)運算监嗜。有六種未明確類型的變量類型,分別是無類型的布爾型抡谐,無類型的整數(shù)裁奇,無類型的字符,無類型的浮點數(shù)麦撵,無類型的復(fù)數(shù)框喳,無類型的字符串。

枚舉

關(guān)鍵字 iota 定義常量組中從 0 開始按行計數(shù)的自增枚舉值厦坛。

const (
  Sunday = iota // 0
  Monday // 1五垮,通常省略后續(xù)?行表達(dá)式。
  Tuesday // 2
  Wednesday // 3
  Thursday // 4
  Friday // 5
  Saturday // 6
)
const (
  _ = iota // iota = 0
  KB int64 = 1 << (10 * iota) // iota = 1
  MB // 與 KB 表達(dá)式相同杜秸,但 iota = 2
  GB
  TB
)
MB,GB,TB會表達(dá)式與KB相同放仗,都為1<<(10 * _),但是iota會自增

同樣的道理:

const (
    i =1<<iota //
    j=3<<iota
    k
    l)

  i = 1,j=6,k=12,I=24撬碟。

iota每出現(xiàn)一次诞挨,自動加1;而前面的操作數(shù)如果不指定呢蛤,默認(rèn)使用上一個的惶傻,在這里是3。則k=3<<2其障,I=3<<3银室。

如果 iota ?自增被打斷,須顯式恢復(fù)励翼。

const (
  A = iota // 0
  B // 1
  C = "c" // c
  D // c蜈敢,與上?一?行相同。
  E = iota // 4汽抚,顯式恢復(fù)抓狭。注意計數(shù)包含了 C、D 兩?行造烁。
  F // 5
)
需要注意的是E=4否过,顯式恢復(fù)午笛。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苗桂,隨后出現(xiàn)的幾起案子药磺,更是在濱河造成了極大的恐慌,老刑警劉巖誉察,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惹谐,居然都是意外死亡持偏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門氨肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸿秆,“玉大人,你說我怎么就攤上這事怎囚∏溥矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵恳守,是天一觀的道長考婴。 經(jīng)常有香客問我,道長催烘,這世上最難降的妖魔是什么沥阱? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮伊群,結(jié)果婚禮上考杉,老公的妹妹穿的比我還像新娘。我一直安慰自己舰始,他們只是感情好崇棠,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丸卷,像睡著了一般枕稀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谜嫉,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天抽莱,我揣著相機與錄音,去河邊找鬼骄恶。 笑死食铐,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的僧鲁。 我是一名探鬼主播虐呻,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼象泵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了斟叼?” 一聲冷哼從身側(cè)響起偶惠,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎朗涩,沒想到半個月后忽孽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡谢床,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年兄一,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片识腿。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡出革,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出渡讼,到底是詐尸還是另有隱情骂束,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布成箫,位于F島的核電站展箱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蹬昌。R本人自食惡果不足惜析藕,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凳厢。 院中可真熱鬧账胧,春花似錦、人聲如沸先紫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遮精。三九已至,卻和暖如春本冲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背檬洞。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留添怔,地道東北人湾戳。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓贤旷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幼驶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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