Go語言學(xué)習(xí)教程(五)

一惨驶、常量概述

* 常量是一個固定值,在編譯器就確定結(jié)果.聲明時必須賦值且結(jié)果不可以改變.

* 因為常量在編譯器就確定,可以防止程序運行過程中意外修改

* 常量關(guān)鍵字const

* 常量定義完可以不使用

* Go語言中常量定義沒有明確語法要求,可以不全大寫,駝峰即可.

* 很多內(nèi)容可以定義成常量

????* 人名

????* 圓周率

????* 電話號

????* 等

二滑绒、常量定義

* 定義常量時如果不是必須指定特定類型,可以省略類型,使用默認類型捻勉,且數(shù)值類型常量(不定義類型)可以直接進行運算

* 常量的值可以是表達式,但是不允許出現(xiàn)變量

funcmain() {

constastring="smallming"

constb=123

constc=3*2+5//不要指定類型

constd=1.5//不要指定類型

fmt.Printf("%T %T",c,d)//int float

fmt.Println(c+d)//12.5

//下面這種方式是錯誤的

i:=3

conste=i*2+5//const initializer i * 2 + 5 is not a constant

}

* 當(dāng)定義多個常量時官方推薦的方式

const (

????????a = 1

????????b = 2

????????c = true

????)

* 定義多常量時后一個常量如果沒有賦值,與前一個常量值相同.

????* 第一個常量必須賦值

func main() {

????const (

????????a = 1

????????b

????????c

????)

????fmt.Println(a,b,c)//輸出:1 1 1

}

三、常量生成器

* 當(dāng)一組常量都是數(shù)值類型虹茶,可以使用常量生成器iota指定這組常量按照特定規(guī)則變化

* iota起始值為0,每次增加1

func main() {

????const (

????????a = iota

????????b

????????c

????)

????fmt.Println(a, b, c) //輸出: 0 1 2

????const (

????????d = iota << 1

????????e

????????f

????)

????fmt.Println(d, e, f) //輸出:0 2 4

}

* 無論是否使用iota,一組常量中每個的iota值是固定的,iota按照順序自增1

* 每組iota之間無影響

func main() {

????const (

????????a = 5????//iota=0

????????b = 3????//iota=1

????????c = iota //iota=2

????????d????????//iota=3

????)

????fmt.Println(a, b, c, d) //輸出5 3 2 3

????const (

????????e = iota //iota=0

????????f????????//iota=1

????????g = 10???//iota=2

????????h????????//iota=3

????????i = iota //iota=4

????????j????????//iota=5

????)

????fmt.Println(e, f, g, h, i, j) // 0 1 10 10 4 5

}

四逝薪、變量地址

* 變量本質(zhì)就是內(nèi)存中一塊數(shù)據(jù)的標記。把值存儲到變量中實質(zhì)是把值存儲到內(nèi)存中

* 每次對變量重新賦值就是在修改變量地址中的內(nèi)容

* 在Go語言中可以通過 &+變量名 獲取到變量地址值

* 重新創(chuàng)建一個非引用型變量(即使是把已有變量直接賦值給新變量)也會新開辟內(nèi)存地址.

二蝴罪、指針變量

* 指針變量指向一個值的內(nèi)存地址

* 使用&+變量 返回值就是一個指針類型

* 使用var 變量名 *類型 聲明指針類型變量

* 聲明指針不會開辟內(nèi)存地址,只是準備要指向內(nèi)存某個空間,而聲明變量會開辟內(nèi)存地址,準備存放內(nèi)容董济。所以指針類型變量都是把一個變量的地址賦值給指針變量

* 使用*+指針能夠獲取內(nèi)存地址中的值.所以*+指針就和直接使用變量是相同的

* 應(yīng)用指針可以實現(xiàn)多個地方操作同一個內(nèi)存地址的值(在方法參數(shù)應(yīng)用指針較多)

func main() {

????//創(chuàng)建變量

????a := 123

????var point *int

????point = &a //此時point和&a是相等的

????fmt.Println(point)

????*point = 3?????????????//等價于a=3

????fmt.Println(*point, a) //*point和a是相當(dāng)?shù)?/p>

}

三、空指針

* 指針目的就是指向內(nèi)存中一塊地址

* 聲明指針后指針不會指向任何內(nèi)存地址,所以此時指針是空.在Go語言中空用nil表示

func main() {

????var a *int

????fmt.Println(a)????????//輸出:<nil>

????fmt.Println(a == nil) //輸出true

}

四要门、new函數(shù)

* 可以通過new函數(shù)直接創(chuàng)建一個類型的指針:變量名:=new(Type)

* 使用new函數(shù)創(chuàng)建的指針已有指向,可以使用*指針對象進行賦值.

func main() {

????a := new(int)

????fmt.Println(a) //輸出:指針地址

????*a = 123

????fmt.Println(*a) //輸出:123

}

* 只聲明的指針變量不能直接賦值虏肾。

五、條件判斷if

* 在程序開發(fā)中經(jīng)常需要判斷.根據(jù)情況不同,程序執(zhí)行的分支也不同.這個時候就可以使用if

* if在程序中代表如果欢搜,如果條件成立就執(zhí)行,否則就不執(zhí)行

* if的語法結(jié)構(gòu),在編譯器中表達式兩側(cè)可以寫小括號,但是通常省略

* 在if語法結(jié)構(gòu)中所有表達式最終結(jié)果都是bool類型,true代表成立并執(zhí)行對應(yīng)代碼

* 可以在if 表達式中聲明變量,這個變量的范圍只在if中能夠使用

* 多個單獨if使用時相互沒有影響

func main() {

????score := 65

????if score >= 60 {

????????fmt.Println("及格")

????}

????if score < 60 {

????????fmt.Println("不及格")

????}

}

六封豪、程序調(diào)試

* 程序調(diào)試,俗稱:debug,通過特定的手段,一個語句一個語句的觀察程序執(zhí)行過程

* debug經(jīng)常用在調(diào)錯中,當(dāng)結(jié)果不符合預(yù)期,代碼又很多時,debug可以找出哪行出現(xiàn)問題

* 程序調(diào)試步驟

????* 在程序中某行前面單擊出現(xiàn)紅色圓形

????* 右鍵,選擇Debug '文件名'

????* 通過點擊按鈕或使用快捷鍵選擇:向下執(zhí)行(F6),進入調(diào)用(F5),向上跳出(F7)觀察程序

七、if ... else 結(jié)構(gòu)

* if 可以單獨使用也可以結(jié)合else使用,當(dāng)滿足互斥條件時使用if...else結(jié)構(gòu)

* if..else結(jié)構(gòu)中如果if成立執(zhí)行if否則執(zhí)行else

func main() {

????i := 59

????if i >= 60 {

????????fmt.Println("及格")

????} else{

????fmt.Println("不及格")

????}

}

* if每種結(jié)構(gòu)都可以相互嵌套

* 理論講if可以很多層嵌套

* 當(dāng)需要判斷多個條件時使用if ... else if .... else結(jié)構(gòu)

* 這個結(jié)構(gòu)是一個整體.只要有一個條件成立后面的都不判斷,立即結(jié)束

* else可以沒有

* 改寫嵌套代碼,修改如下

func main() {

????score := 77

????if score >= 90 {

????????fmt.Println("優(yōu)秀")

????} else if score >= 80 {

????????fmt.Println("良好")

????} else if score >= 70 {

????????fmt.Println("中等")

????} else if score >= 60 {

????????fmt.Println("及格")

????} else {

????????fmt.Println("不及格")

????}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炒瘟,一起剝皮案震驚了整個濱河市吹埠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖藻雌,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斩个,居然都是意外死亡胯杭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門受啥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來做个,“玉大人,你說我怎么就攤上這事滚局【优” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵藤肢,是天一觀的道長太闺。 經(jīng)常有香客問我,道長嘁圈,這世上最難降的妖魔是什么省骂? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮最住,結(jié)果婚禮上钞澳,老公的妹妹穿的比我還像新娘。我一直安慰自己涨缚,他們只是感情好轧粟,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脓魏,像睡著了一般兰吟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轧拄,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天揽祥,我揣著相機與錄音,去河邊找鬼檩电。 笑死拄丰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俐末。 我是一名探鬼主播料按,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卓箫!你這毒婦竟也來了载矿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闷盔,沒想到半個月后弯洗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡逢勾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年牡整,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溺拱。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡逃贝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迫摔,到底是詐尸還是另有隱情沐扳,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布句占,位于F島的核電站沪摄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纱烘。R本人自食惡果不足惜卓起,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凹炸。 院中可真熱鬧戏阅,春花似錦、人聲如沸啤它。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽变骡。三九已至离赫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塌碌,已是汗流浹背渊胸。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留台妆,地道東北人翎猛。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像接剩,于是被迫代替她去往敵國和親切厘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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