Go語(yǔ)言課程講義_第1頁(yè)
Go語(yǔ)言課程講義_第2頁(yè)
Go語(yǔ)言課程講義_第3頁(yè)
Go語(yǔ)言課程講義_第4頁(yè)
Go語(yǔ)言課程講義_第5頁(yè)
已閱讀5頁(yè),還剩127頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-:區(qū)塊鏈基礎(chǔ)

二:初識(shí)Go語(yǔ)言

1:GO語(yǔ)言介紹

1.1GO語(yǔ)言是什么

,lGo是一種開(kāi)源的程序設(shè)計(jì)語(yǔ)言,它意在使得人們能夠方便地構(gòu)建簡(jiǎn)單、可靠、高效率的軟件”(來(lái)自go官網(wǎng)

我們程序員在開(kāi)發(fā)程序,開(kāi)發(fā)軟件時(shí)都會(huì)選擇一門編程語(yǔ)言,那么我們應(yīng)該怎樣進(jìn)行選擇呢?可能有同學(xué)會(huì)說(shuō),我

們要選擇一門簡(jiǎn)單的,容易學(xué)習(xí)的,而且開(kāi)發(fā)效率高的,能夠在很短的時(shí)間內(nèi)開(kāi)發(fā)完成一個(gè)軟件,這樣老板會(huì)非常

的滿意,能夠升職加薪,Python語(yǔ)言或者Ruby語(yǔ)言就非常適合這種快速開(kāi)發(fā)。但是問(wèn)題是,用這種語(yǔ)言開(kāi)發(fā)的軟

件,當(dāng)用戶量多了,運(yùn)行的速度會(huì)非常慢,給人的感覺(jué)就是非常卡,大家想一下這種軟件還有人愿意使用嗎?那可

能又有同學(xué)說(shuō)了,我們要學(xué)習(xí)運(yùn)行速度快的編程語(yǔ)言,例如C或者是C++,但是這類編程語(yǔ)言學(xué)習(xí)難度是非常大的。

那么有沒(méi)有一種編程語(yǔ)言,學(xué)習(xí)非常簡(jiǎn)單,開(kāi)發(fā)速度非??欤_(kāi)發(fā)出的軟件電腦運(yùn)行速度非??炷??有,就是我們

今天開(kāi)始學(xué)習(xí)的G0語(yǔ)言。G0語(yǔ)言借鑒了Python等其它編程語(yǔ)言簡(jiǎn)單,易學(xué),生產(chǎn)效率高,同時(shí)G0語(yǔ)言專門針

對(duì)多處理器(多核CPU,在這里可以給學(xué)生看一下windows下的多核CPU,)系統(tǒng)的程序進(jìn)行了優(yōu)化(讓每核CPU

都能夠執(zhí)行G0語(yǔ)言開(kāi)發(fā)的程序),這樣使用GO語(yǔ)言開(kāi)發(fā)的程序運(yùn)行的速度可以媲美C或C++開(kāi)發(fā)程序的速度。

1.2GO語(yǔ)言優(yōu)勢(shì)

工:運(yùn)行速度快,簡(jiǎn)單易學(xué)

2:薪水待遇高

GO開(kāi)發(fā)工程師北京丹楓科技有限公司4晾-朝陽(yáng)區(qū)2-2.5萬(wàn)/月

GO開(kāi)發(fā)工程師北京阿提拉科技有限公司4晾1-1.5萬(wàn)/月

區(qū)塊鏈開(kāi)發(fā)工程師(G。語(yǔ)言)4晾世紀(jì)互聯(lián)寬艘據(jù)中心有限公司4晾-朝陽(yáng)區(qū)2.5-3萬(wàn)/月

GO開(kāi)發(fā)工程師Adhub(醞)d晾-朝陽(yáng)區(qū)1-2.5萬(wàn)/月

3:適合區(qū)塊鏈開(kāi)發(fā)

4:跨平臺(tái)

5:豐富的標(biāo)準(zhǔn)庫(kù)(指令),G。目前已經(jīng)內(nèi)置了大量的庫(kù),特別是網(wǎng)絡(luò)庫(kù)非常強(qiáng)大(開(kāi)發(fā)飛秋軟件)

6:G。里面也可以直接包含C代碼,利用現(xiàn)有的豐富的C庫(kù)

7:語(yǔ)言層面支持并發(fā),這個(gè)就是G。最大的特色,天生的支持并發(fā)。所謂并發(fā),所有正在運(yùn)行的程序輪流使用CPU,

每個(gè)程序允許占用CPU的時(shí)間非常短(比如10毫秒),這樣用戶根本感覺(jué)不出來(lái)CPU是在輪流為多個(gè)程序服務(wù),就好象

所有的程序都在不間斷地運(yùn)行一樣。并發(fā)好處就是可以運(yùn)行多個(gè)程序,并不卡頓。

1.3GO語(yǔ)言能干什么

1:網(wǎng)絡(luò)編程,這一塊目前應(yīng)用最廣,例如網(wǎng)站開(kāi)發(fā)。

2:服務(wù)器編程,例如:處理日志,處理文件。(在網(wǎng)站開(kāi)發(fā)的過(guò)程中都會(huì)涉及到)

3:區(qū)塊鏈開(kāi)發(fā)

2:環(huán)境安裝

前面已經(jīng)對(duì)GO語(yǔ)言做了一個(gè)簡(jiǎn)單的介紹,相信大家也已經(jīng)基本有所了解了,那么我相信大家迫不及待的想學(xué)習(xí)GO語(yǔ)言了,但

是我們?cè)诰唧w學(xué)習(xí)GO語(yǔ)言前,需要先安裝GO的開(kāi)發(fā)環(huán)境,只有把GO的開(kāi)發(fā)環(huán)境安裝好了,才能有GO語(yǔ)言的指令來(lái)開(kāi)發(fā)網(wǎng)

站,飛秋等等軟件。也就是所謂的環(huán)境安裝,就是將GO語(yǔ)言的指令都安裝在你的電腦上,那么你在開(kāi)發(fā)軟件的時(shí)候就可以直

接用了。GO環(huán)境的安裝分為windows系統(tǒng)的安裝和linux系統(tǒng)的安裝,我們基礎(chǔ)班先學(xué)習(xí)windows下的安裝,就業(yè)班學(xué)習(xí)linux

系統(tǒng)下Go環(huán)境的安裝。

Windows下GO語(yǔ)言的環(huán)境安裝步驟如下:

Go安裝包下載網(wǎng)址:/download

有zip壓縮版和msi安裝版兩個(gè)按本下載。(這里使用msi安裝版,比較方便)。

運(yùn)行msi安裝文件,千萬(wàn)不要在安裝路徑中出現(xiàn)中文,一路Next。(關(guān)于安裝路徑在這里可以給學(xué)生重點(diǎn)強(qiáng)調(diào),安裝的位

置以及不能出現(xiàn)中文名稱)

3:第一個(gè)GO程序

下面我們就用IDE工具,開(kāi)發(fā)第一個(gè)GO程序。具體步驟如下:

1:選擇文件新建彈出如下對(duì)話框。

注意:程序名稱,和程序保存位置不能輸入中文

2:新建完成后,開(kāi)始輸入代碼。

1packagemain

2

3import"fmt"

4

5-1funcmain(){

fmt.Print("hellogo")

7)

8

第一行:每個(gè)Go源代碼文件的開(kāi)頭都是一個(gè)package聲明,表示該Go代碼所屬的包。

GO語(yǔ)言中是通過(guò)包來(lái)對(duì)代碼進(jìn)行管理的。那么什么是包呢?我通過(guò)一個(gè)例子來(lái)解釋一下包的概念。例如:有一家公司叫"京東

“",該公司有一個(gè)項(xiàng)目叫“京東網(wǎng)上商城”,該項(xiàng)目下面有管理“客戶信息”的代碼,另外一家公司叫“淘寶”,該公司也有一

個(gè)項(xiàng)目叫“淘寶網(wǎng)上商城”,該項(xiàng)目下面也有管理的“客戶信息”的代碼,我開(kāi)發(fā)的“客戶管理軟件”,既要用到“京東”的客

戶信息管理代碼,也要用到“淘寶”的客戶信息管理代碼,為了能夠很好的區(qū)分,我們?cè)谑褂脮r(shí)必須寫清楚,客戶的信息管理

代碼到底是來(lái)自哪個(gè)商城,所以我可以這樣寫“import京東”,表示所使用的“客戶信息代碼”是來(lái)自“京東"的,那么"京東"

就是一個(gè)標(biāo)識(shí),也就是包。所以說(shuō),包就是一個(gè)標(biāo)識(shí),標(biāo)志著著你寫的GO代碼來(lái)自哪.這樣代碼管理非常清晰,使用也非常方

便。

那么后面隨著我們學(xué)習(xí)的深入,學(xué)習(xí)的代碼也越來(lái)越多,我們給大家去講解怎樣自己創(chuàng)建包,來(lái)管理代碼。創(chuàng)建包用到的就是

package.

但是,不管你創(chuàng)建多少個(gè)包,要想讓程序運(yùn)行,必須包含一個(gè)main包。如果缺少該包,程序是無(wú)法運(yùn)行的。

第三行代碼:import表示導(dǎo)入,"fmt”是包名.

不管是使用我們自己定義的包還是GO自帶都是通過(guò)import導(dǎo)入的,“fmt”是GO自帶的包,該包包含了怎樣將信息打印在電

腦屏幕上。注意包名要用""表不。

第五行代碼:表示程序的入口,程序就是從該位置開(kāi)始執(zhí)行的,就像是教室的門口一樣,注意該行代碼是固定的寫法,func與

main之間必須有空格,同時(shí)main后面必須帶小括號(hào),后面的一對(duì)大括號(hào)表示要完成的具體工作,也就是完成具體任務(wù)的代碼必

須寫在一對(duì)大括號(hào)內(nèi)。

func表示后面跟著的main是一個(gè)函數(shù),函數(shù)必須有一對(duì)小括號(hào)。什么是函數(shù)呢?現(xiàn)在大家可以先理解與我們?cè)跀?shù)學(xué)中學(xué)到的

函數(shù)是一樣的,都是實(shí)現(xiàn)某個(gè)具體的功能,例如我們學(xué)習(xí)的三角函數(shù)等。Main函數(shù)實(shí)現(xiàn)的就是入口功能。再次強(qiáng)調(diào)一下,GO

語(yǔ)言中的函數(shù)前面必須加上func這個(gè)單詞,而且函數(shù)名稱后面必須跟一對(duì)小括號(hào)。

第六行代碼:就是使用了fmt包(注意具體使用的時(shí)候不需要加上雙引號(hào))中的Print函數(shù),將要"hell。go"打印在屏幕上。

這行代碼要注意的是,fmt包與Print函數(shù)之間是用.(點(diǎn)連接的),該點(diǎn)是在半角輸入法狀態(tài)下輸入,同時(shí)Print函數(shù)第一個(gè)字母P

是大寫的,不能寫成小寫,也就是說(shuō)GO語(yǔ)言是區(qū)分大小寫的,有很多同學(xué)在這里容易出錯(cuò)。將要輸出的信息寫在Print函數(shù)的

括號(hào)內(nèi)(注意括號(hào)也是在半角狀態(tài)下輸入的),并且用雙引號(hào)包裹起來(lái)(雙引號(hào)也是半角狀態(tài)下輸入的)

3:代碼運(yùn)行

我們第一個(gè)GO程序已經(jīng)寫完了,那么我們寫的程序到底能否運(yùn)行呢?是否有錯(cuò)誤呢?下面我們執(zhí)行我們的程序,程序的執(zhí)行

分為兩步:

(1)編譯

編譯的操作步驟:點(diǎn)擊“編譯”菜單,選擇"Build"(或者直接按快捷鍵Ctrl+B).編譯的目的是檢查我們寫的代碼是否

出錯(cuò),如果沒(méi)有出錯(cuò),那么會(huì)提示“成功",并且在我們程序所在的目錄生成一個(gè)exe文件,該文件就是可執(zhí)行文件。如

果出錯(cuò)那么會(huì)顯示錯(cuò)誤信息,并且不會(huì)生成.exe文件

(2)執(zhí)行

編譯操作完成后,我們就可以執(zhí)行我們的代碼了,選擇“編譯”菜單中的“Run”,執(zhí)行。執(zhí)行的就是編譯所生成

的exe文件。這時(shí),有同學(xué)可能就會(huì)問(wèn),如果我們不執(zhí)行"Build",直接執(zhí)行“Run”,可以嗎?不可以,因?yàn)椴?/p>

執(zhí)行"Build”就無(wú)法生成”.exe"文件,那么也就無(wú)法執(zhí)行。最后,我們?yōu)榱朔奖愀咝Э梢赃x擇“Run”,這個(gè)選

項(xiàng),將編譯與執(zhí)行放在一起操作。

4:其它注意事項(xiàng)

現(xiàn)在我們已經(jīng)將我們寫的第一個(gè)GO語(yǔ)言程序,執(zhí)行成功了,但是還有以下幾點(diǎn)內(nèi)容需要在給大家強(qiáng)調(diào)一下:

(1)強(qiáng)制左花括號(hào){的放置位置,如果把左花括號(hào){另起一行放置,這樣做的結(jié)果是Go編譯器報(bào)告編譯錯(cuò)誤。

(2)每行代碼占一行。

(3)如果我們?cè)谖覀円呀?jīng)成功的程序中,在加入一行輸入,應(yīng)該怎么加呢?直接輸入fmtRint(”aaaaa"),然后直接

執(zhí)“Run”,發(fā)現(xiàn)并沒(méi)有新的內(nèi)容輸出,原因是什么?應(yīng)該怎么做?

(4)關(guān)于換行輸出的問(wèn)題,前面的輸出都沒(méi)有換行,那么怎樣進(jìn)行換行輸出呢?

5:總結(jié)

對(duì)第一個(gè)GO程序進(jìn)行總結(jié)。

4:學(xué)習(xí)資料

Go語(yǔ)言官網(wǎng)(需要翻墻):/

go中文社區(qū):https:〃

go中文在線文檔:https:〃/pkgdoc

三:注釋

1:注釋作用

在前面我們已經(jīng)寫過(guò)第一個(gè)G0程序了,該程序的功能很簡(jiǎn)單,代碼量不是很多,也就是幾行代碼。但是大家看下面這段代碼,

代碼量比我們寫的第一個(gè)程序代碼量多了很多,代碼多了以后,閱讀起來(lái)非常不容易。

packagemain

insert"fm

,ftmcmain()1

varn[10]int

vari,jint

fori=0;i<10;i++{

n[i]-i+100

forj=0;j<10;j++(

fmt.Printf("Element[%d]-%d\n",j,n[j])

接下來(lái),在看下面的代碼,由于在一些代碼行上有漢字,所以閱讀起來(lái)就很方便。

packagemain

2I

3impor't"fmt"

4

5£uncmain(){________________________________________________

6varn[10]int|/*n足-個(gè)為10的數(shù)外L*/一

7vari,jint

8

9|/*為數(shù)/In初J好評(píng)七/匕索*/|

10fori=0;i<10;i++{_______________________________

11n[i]=1+100]/*設(shè);置元術(shù)為i+100*/

12

13

14|/*輸日每個(gè)數(shù)組元索的值*/

15forj_0;j<10;j++r

16fmt.Printf("Element[%d]%d\n",j,n[j])

我們通過(guò)用自己熟悉的語(yǔ)言(例如,漢語(yǔ)),在程序中對(duì)某些代碼進(jìn)行標(biāo)注說(shuō)明,這就是注釋的作用,能夠大大增強(qiáng)程序

的可讀性。以后,在公司中做開(kāi)發(fā),其他程序員會(huì)經(jīng)常閱讀我們寫的代碼,當(dāng)然,我們也會(huì)經(jīng)常閱讀別的程序員寫的代碼,如

果代碼中加了注釋,那么閱讀起來(lái)就非常容易了。

2:注釋分類

(1)單行注釋

所謂單行注釋,就是每次給一行代碼加注釋,你可以在任何地方使用以〃開(kāi)頭的單行注釋。

fmt.Printin("hellogo")〃將信息輸出到屏幕上。

以〃開(kāi)頭,〃右邊的所有東西當(dāng)做說(shuō)明,而不是真正要執(zhí)行的程序,起輔助說(shuō)明作用

⑵多行注釋

若果代碼量比多,每行加注釋,比較麻煩,可以使用多行注釋。

5/funcmain(){

5//*

7以下兩行代碼都是將信息打印在屏幕上|

3*/

fmt.Printin("hellogo")

fmt.Printin("Iloveyou")

L)

除了給代碼加上說(shuō)明,用注釋以外,如果你寫的代碼不想讓計(jì)算機(jī)執(zhí)行,那么也可以加上注釋。

加了注釋后代碼不會(huì)被編譯執(zhí)行,這就是對(duì)已有的代碼進(jìn)行注銷。

(3)重點(diǎn)強(qiáng)調(diào)

以后寫程序要多加注釋,這是我們程序猿的專業(yè)和職業(yè)道德,不加注釋就是流氓。

四:變量

1:什么叫變量

在前面的講解案例中,我們是讓計(jì)算機(jī)輸出數(shù)據(jù)到屏幕上,那么有同學(xué)可能就要問(wèn)了,怎樣讓計(jì)算機(jī)保存我們通過(guò)鍵盤輸入的

數(shù)據(jù)呢?這就要用到變量了。

所謂的變量簡(jiǎn)單的理解就是計(jì)算機(jī)用來(lái)存儲(chǔ)數(shù)據(jù)的。我們可以理解變量就像我們?nèi)コ匈I商品時(shí)用到的購(gòu)物車,我們先將商品

從貨架上拿下來(lái),放到購(gòu)物車中,結(jié)賬時(shí)在從購(gòu)物車中取出商品。計(jì)算機(jī)通過(guò)變量來(lái)保存數(shù)據(jù)實(shí)際上將數(shù)據(jù)存儲(chǔ)到計(jì)算機(jī)的內(nèi)

存中,這里我們可以畫一個(gè)圖給大家理解一下。

內(nèi)存

rcc0x100010

100

0x1000001

弓貯0x00010001

計(jì)算機(jī)將內(nèi)存劃分成不同的區(qū)域,數(shù)據(jù)就是存儲(chǔ)在這些區(qū)域中,那么怎樣從這些區(qū)域中將數(shù)據(jù)取出來(lái)呢?計(jì)算機(jī)將每塊區(qū)域都

加上了一串?dāng)?shù)字,作為編號(hào)。通過(guò)該編號(hào)就可以將數(shù)據(jù)取出來(lái)了,但是問(wèn)題是,這一串?dāng)?shù)字對(duì)我們程序員來(lái)說(shuō)是非常難記憶的,

為了解決這個(gè)問(wèn)題,我們可以通過(guò)變量的方式來(lái)表示存儲(chǔ)的數(shù)據(jù),如下圖:

我們給每個(gè)存儲(chǔ)區(qū)域加上了Numberl,Number2,Name等符號(hào),這樣通過(guò)這些符號(hào)來(lái)存儲(chǔ)數(shù)據(jù),然后通過(guò)這些符號(hào)取出數(shù)據(jù)就

非常容易,方便了。這些符號(hào)就是變量。

2:變量類型

我們現(xiàn)在理解了變量可以用來(lái)存儲(chǔ)數(shù)據(jù),但是我們要存儲(chǔ)的數(shù)據(jù)類型是各種各樣的,例如:整數(shù),小數(shù),文本等等。所以我們

必須在定義變量時(shí)就要告訴計(jì)算機(jī),定義的變量存儲(chǔ)是什么類型的數(shù)據(jù)。那么在內(nèi)存中就可以根據(jù)不同的類型來(lái)開(kāi)辟不同的存

儲(chǔ)空間。

生活中關(guān)于“類型”的例子:

關(guān)于GO語(yǔ)言中的有哪些類型,我們后面會(huì)具體講解。下面我們先看一下怎樣聲明變量?

3:變量聲明

所謂聲明變量就是創(chuàng)建一個(gè)變量,并且指定該變量存儲(chǔ)什么類型的數(shù)據(jù)。

G。語(yǔ)言引入了關(guān)鍵字var,而類型信息放在變量名之后,示例如下:

1packagemain

2

3import"fmt

4

5funcmain(){

6fmt.Println(“測(cè)試變量定義”)

7小聲明格式var變量名類型,變晶聲明了,必須要使用

8//2、聲明整型變量,該變量默認(rèn)值為0

9//3、同一個(gè){}里,聲明的變量名是唯一的

10varaint

11fmt.Printin(Ma=",a)

12

13〃4、可以同時(shí)聲明多個(gè)變量,中間用逗號(hào)隔開(kāi)

14//varb,cint

15}

16

注意:這里的輸出是先將變量a的值取出來(lái),然后在打印在屏幕上。所以不能給a這個(gè)變量加上引號(hào)。

4:變量初始化

現(xiàn)在我們雖然已經(jīng)完成變量的定義了,但是該變量中存儲(chǔ)的值,并不是我們想要的,我們希望變量中存儲(chǔ)的是我們想要的值,

應(yīng)該怎么辦?

我們可以在定義變量時(shí),就給變量賦值,這種方式就是變量的初始化。示例如下:

varbint=10<定義變量b同時(shí)將整數(shù)10賦值給b

fmt?Printin(b)

注意:在這里我們將"="符號(hào),讀作“賦值號(hào)”,不能讀作"等號(hào)'O

問(wèn)題:以下的程序輸出的結(jié)果是多少?

varcint=20

fmt.Println("c")

同時(shí)再次強(qiáng)調(diào)一下在這里輸出變量c的值,所以不能給變量c加上雙引號(hào)。

5:變量賦值

除了在定義變量時(shí),完成初始化以外,我們也可以在變量定義完后,再給變量賦值,也就是先聲明后賦值,示例如下:

注意:上面的輸出語(yǔ)句也可以只使用一個(gè)Printin函數(shù),具體如下:fmt.Println(a,b),中間用逗號(hào)進(jìn)行分割

問(wèn)題1:以下程序的輸出結(jié)果是多少?

varaint=10

varbint

b=a

fmt.Printin(b)

問(wèn)題2:以下程序的輸出結(jié)果是多少?

varaint=10

varbint=20|

b=a

fmt.Printin(b)

結(jié)論:變量可以重復(fù)賦值,一旦給一個(gè)變量賦了新值,那么變量中的老值就不復(fù)存在了

6:自動(dòng)推導(dǎo)類型

在給變量賦值時(shí),我們感覺(jué)非常麻煩,有沒(méi)有更簡(jiǎn)單的給變量賦值的方式,我們可以使用自動(dòng)推導(dǎo)類型,具體示例如下:

num:=30

fmt?Printin(num)

所謂自動(dòng)推導(dǎo)類型,就是不用通過(guò)var聲明變量,不用指定類型,直接在變量名后面跟“:”號(hào),同時(shí)完成賦值。那么GO會(huì)根

據(jù)所賦的值自動(dòng)推導(dǎo)出變量的類型。如果給num變量賦值為小數(shù),那么該變量的類型為小數(shù)類型(浮點(diǎn))。

通過(guò)比較,我們發(fā)現(xiàn)這種方式比前面的賦值方式要簡(jiǎn)單方便。這種方式,也是我們以后開(kāi)發(fā)過(guò)程中最常用的方式。

7:多重賦值匿名變量

(1)多重賦值

在上面的講解中,我們給變量num賦值,采用了自動(dòng)推導(dǎo)的方式,如果想一次使用自動(dòng)推導(dǎo)的方式,給多個(gè)變量賦值,應(yīng)該怎

樣實(shí)現(xiàn)呢?具體如下:

?funcmain(){

a:=1

b:=10

c:=20

fmt.PrintIn(a,b,c)

)

I

但是這種方式寫起來(lái)非常的復(fù)雜,可以用如下的方式進(jìn)行簡(jiǎn)化:

a,b,c:=1,10,30

fmt.Printin(a,b,c)

將1的值賦值給a,將10的值賦值給b,將30的值賦值給c.

(2)匿名變量

一匿名變量,丟棄數(shù)據(jù)不進(jìn)行處理,一匿名變量配合函數(shù)返回值使用才有價(jià)值,目前大家只需要知道其語(yǔ)法,后面學(xué)到函數(shù)時(shí),我們?cè)趶?qiáng)調(diào)匿名變量的

使用場(chǎng)景。

現(xiàn)在我們先看一下匿名變量的語(yǔ)法:

I,i,j:=1,2,3,4I

8:數(shù)據(jù)置換

到目前為止,我們已經(jīng)學(xué)習(xí)了什么是變量,變量的定義,以及變量的賦值。那么下面大家思考如下問(wèn)題:

有兩個(gè)變量a和b,a的值為10,b的值為20,交換兩個(gè)變量的值?

(有兩個(gè)杯子,都盛滿了水,怎樣交換兩個(gè)杯子中的水)

(1)使用傳統(tǒng)方式實(shí)現(xiàn)

varaint=10

varbint=20

vartempint

temp=a

a=b

b=temp

fmt.Printin(a,b)

⑵使用多重賦值的方式實(shí)現(xiàn)

a,b:=10,20

a,b=b,注意:第二行沒(méi)有冒號(hào)

fmt.Printin(a,b)

多重賦值的方式交換兩個(gè)變量的值,比通過(guò)第三個(gè)變量來(lái)進(jìn)行變量交換更簡(jiǎn)單,代碼也少。

9:輸出格式

關(guān)于“輸出"大家也都能夠理解是什么意思了,就是將數(shù)據(jù)信息打印在電腦屏幕上。生活中也隨處可見(jiàn)輸出的場(chǎng)景。

在我們GO語(yǔ)言中進(jìn)行輸出,用到我們前面所講解的兩個(gè)函數(shù):Print。和Println()

這個(gè)兩個(gè)函數(shù)的區(qū)別就是Print。函數(shù)不換行,Phntln()換行輸出。

關(guān)于輸出這里有兩個(gè)問(wèn)題,需要給大家強(qiáng)調(diào)清楚。

(1)我們前面的程序中,已經(jīng)多次用到輸出,不管是采用Print。,還是PMtln(),但是問(wèn)題是,每次輸出的數(shù)據(jù)結(jié)構(gòu)不清晰,

比較混亂。

例如如下程序:

眉funcmain(){

a:=1

b:=10

c:=20

fmt.Printin(a,b,c)

)

I

該程序輸出的結(jié)果是L10,20.如果我們現(xiàn)在讓另外一個(gè)程序員查看該結(jié)果,該程序員很難分清楚,1是來(lái)自哪個(gè)變量,

2是來(lái)自哪個(gè)變量,3來(lái)自哪個(gè)變量,除非該程序員閱讀代碼。但是,大家想一下,如果該程序的代碼量非常大,那

么該程序員閱讀代碼是否要花費(fèi)很長(zhǎng)的時(shí)間呢?所以,建議采用如下輸出:

」funcmain(){

;a:=1

fmt.PrintIn(,,a=",a)

}

雙引號(hào)內(nèi)的內(nèi)容會(huì)原樣輸出。這樣結(jié)構(gòu)比較清晰,注意與變量名之間用逗號(hào)分隔。

(3)除了使用Println。函數(shù)換行輸出以外,還有另外一個(gè)函數(shù)Printf()也可以實(shí)現(xiàn)換行輸出。示例如下:

5funcmain(){

6a:=1

7b:=20

fmt.Printf('*a=%d\n,b=%dn,a,b)

9)

運(yùn)行以后,發(fā)現(xiàn)確實(shí)換行了。這種輸出方式,就是格式化輸出,%d,表示輸出的是一個(gè)整數(shù),第一個(gè)%d會(huì)被變量a的值替

換,第二個(gè)%d會(huì)被變量b替換,其它類型的輸出用什么去表示后面會(huì)給大家講解。"\n"表示換行。

有同學(xué)可能就問(wèn)了,這種換行輸出方式比較麻煩,但是如果一次性有結(jié)構(gòu)的輸出多個(gè)變量的值,Println()輸出就會(huì)比較麻煩,

并且結(jié)構(gòu)也會(huì)感覺(jué)比較混亂,還是以上面的代碼為例,如下:

5/funcmain(){

6a:=1

7b:=20

8c:=30

nn

fmt.Printin("a=",a,",b="/b,,c=,c)

10}

11I

下面我們?cè)诮o大家演示函數(shù)Printf()的輸出:

5kfuncmain(){

6a:=1

7b:=20

8c:=30

9fmt.Printf('*a=%dzb=%d,c=%d\n",a,b,c)

10

通過(guò)對(duì)比發(fā)現(xiàn)Phntf()函數(shù)一次性換行輸出多個(gè)變量值,結(jié)構(gòu)清晰。

10:接收輸入

前面我們所寫的所有的程序,都是直接給變量賦值,但是很多情況下,我們希望用戶通過(guò)鍵盤輸入一個(gè)數(shù)值,存儲(chǔ)到某個(gè)變量

中,然后將該變量的值取出來(lái),進(jìn)行操作。我們?nèi)粘I钪幸步?jīng)常用到輸入的場(chǎng)景:

咱們?cè)阢y行ATM機(jī)器前取錢時(shí),肯定需要輸入密碼,對(duì)不?

那么怎樣才能讓程序知道咱們剛剛輸入的是什么呢??

大家應(yīng)該知道了,如果要完成ATM機(jī)取錢這件事情,需要先從鍵盤中輸入一個(gè)數(shù)據(jù),然后用一個(gè)變量來(lái)保存,是不是很好理解

?。?/p>

那么我們GO語(yǔ)言怎樣接收用戶的鍵盤輸入呢?如下:

q

5funcmain(){

6varageint

7fmt.Printin(”請(qǐng)輸入你的年齡”)

fmt.Scanf(**%dn,&age)

9fmt.PrintfJ.',a=%dn,agej_

在GO中我們用到了“fmt”這個(gè)包中的Scanf()函數(shù)來(lái)接收用戶鍵盤輸入的數(shù)據(jù)。當(dāng)程序執(zhí)行到Scanf()函數(shù)后,會(huì)停止往下執(zhí)行,

等待用戶的輸入,輸入完成后程序繼續(xù)往下執(zhí)行。在這里重點(diǎn)要注意的是Scanf()函數(shù)的書寫格式,首先也要用寫d”,來(lái)表示輸

入的是一個(gè)整數(shù),輸入完整數(shù)后存儲(chǔ)到變量age中,注意這里age變量前面一定要加上“&”符號(hào),表示獲取內(nèi)存單元的地址

(前面我們說(shuō)的內(nèi)存存儲(chǔ)區(qū)域的編號(hào)),然后才能夠存儲(chǔ)。

還有另外一種獲取用戶輸入數(shù)據(jù)的方式,如下:

5funcmain(){

6varageint

7fmt.Printin("請(qǐng)輸入你的年齡”)

8fmt?Scan(&age)

9fmt.Printf("a=%d",age)

通過(guò)Scan函數(shù)接收用戶輸入,這時(shí)可以省略掉知,這種寫法更簡(jiǎn)單。

11:變量命名規(guī)范

在我們前面的編程中,我們定義變量時(shí)都是隨意進(jìn)行命名,但是在GO語(yǔ)言中,對(duì)變量的命名有一些規(guī)范性的要求,下面我們

看一下具體的要求。

(1)變量命名規(guī)范要求

名字必須以一個(gè)字母(Unicode字母)或下劃線開(kāi)頭,后面可以跟任意數(shù)量的字母、數(shù)字或下劃線。大寫字母和小寫

字母是不同的:heapSort和Heapsort是兩個(gè)不同的名字。

除了上面提到的規(guī)范要求以外,GO語(yǔ)言自己特有的,具有一定含義的一些字符,也不能作為變量名稱。例如,前面

我們接觸到的func,fmt,phnt等等,這些都是GO自帶的,具有特殊含義的字符,我們稱為關(guān)鍵字。

breakdefaultfuncinterfaceselect

casedefergomapstruct

chanelsegotopackageswitch

constfallthroughifrangetype

continueforimportreturnvar

以上關(guān)鍵字都不能作為變量的名稱。

此外,還有大約30多個(gè)預(yù)定義的名字,比如int和true等

truefalseiotanil

intint8intl6int32int64

uintuint8uintl6uint32uint64uintptr

float32float64complexl28complex64

boolbyterunestringerror

makelencapnewappendcopyclosedelete

complexrealimag

panicrecover

(2)下面的變量名稱哪些正確?

principal$lastnamezipcode

123ratediscount%cost_price

marks_3

(3)見(jiàn)名知意

起一個(gè)有意義的名字,盡量做到看一眼就知道是什么意思(提高代碼可讀性)比如:名字就定義為name,定義學(xué)生用

student

(4)駝峰命名法

小駝峰式命名法(lowercamelcase):第一個(gè)單詞以小寫字母開(kāi)始;第二個(gè)單詞的首字母大寫,例如:myName、aDog

大駝峰式命名法(uppercamelcase):每一個(gè)單字的首字母都采用大寫字母,例如:FirstName、LastName

不過(guò)在程序員中還有一種命名法比較流行,就是用下劃線來(lái)連接所有的單詞,比如send_buf

五:基礎(chǔ)數(shù)據(jù)類型

前面我們寫的程序中,用到的變量的類型都是整型,但是在我們GO語(yǔ)言中,還有很多其它的類型,

類型名稱長(zhǎng)度零值說(shuō)明

bool布爾類型1false其值不為真即為假,不可以用數(shù)字代表

true或false

byte字節(jié)型10uint8另(J名

int,uint整型-0有符號(hào)32位或無(wú)符號(hào)64位

int8整型10-128~127,

uint8整型100-255

inti6整型20-32768?32767,

uint16整型200?65535

int32整型40-2147483648到2147483647

uint32整型400到4294967295(42億)

int64整型80-9223372036854775808到92233720368547758070

uint64整型80到18446744073709551615(1844京)

float32浮點(diǎn)型40.0小數(shù)位精確到7位

float64浮點(diǎn)型80.0小數(shù)位精確到15位

string字符串II|?utf-8字符串

下面我們看一下幾個(gè)非常重要的類型,其它類型隨著課程的深入,后面會(huì)給大家講解到。

1:布爾類型

在計(jì)算機(jī)中,我們用什么數(shù)據(jù)類型來(lái)表示一句話的對(duì)錯(cuò),例如:在計(jì)算機(jī)中描述張三(20歲)比李四Q8)小,這句話的結(jié)果?

布爾類型的變量取值要么是真(true),要么是假(false),用bool關(guān)鍵字來(lái)進(jìn)行定義。示例如下:

6//1>聲明變量,沒(méi)有初始化,默認(rèn)值為false

7varabool

8fmt.Printin("aO=",a)

9

10a=true

11fmt.Printin(Ha=",a)

12

13//2、自動(dòng)推導(dǎo)類型

14varb=false

15fmt.Printin(,rb=",b)

16

17c:=false

18fmt.Printin(Mc=",c)

指定格式的輸出:

)/funcmain(){

varbbool

b=true

fmt.Printf("b=%t",b)

布爾類型主要用于后面講解的條件判斷,關(guān)于條件判斷,我們?cè)谶@里先舉一個(gè)生活中的案例,大家可以理解一下:

2:浮點(diǎn)型

61//聲明變量

varflfloat32

8fl=3.14

9fmt.Println(ufl=",fl)

10

11//自動(dòng)推導(dǎo)類型

12f2:=3.14

nH

13fmt.Println(f2=zf2)

14//f1oat64存儲(chǔ)小數(shù)比f(wàn)loat32更準(zhǔn)確

有格式的輸入與輸出

5/funcmain(){

6〃聲明變量

7varflfloat32

,l

8fmt.Scanf(%fn/&fl)

,,,,

9fmt.Printf(fl=%fzfl)

10

11}

注意:varfIfloat32

fl=12

f2;=12Q〃如果不加小數(shù)點(diǎn),f2會(huì)被推導(dǎo)為整型而不是浮點(diǎn)型

3:字符類型

(1)字符基本輸入與輸出

所謂字符類型是用單引號(hào)括起來(lái)的單個(gè)字符,關(guān)于字符的定義使用如下:

5/funcmain(){

6〃聲明變量

7varchbyte//聲明字符類型

8ch=〃單引引,字符

9fmt.Printfch)

10)

輸入一個(gè)字符,如下所示:

5/funcmain(){

6〃聲明變量

varchbyte//聲明字符類型

nn

fmt.Scanf(%cz&ch)

fmt.Printfch)

10

111

(2)字符第二種輸入與輸出方式。

5/funcmain(){

6〃聲明變量

varchbyte//小明字符類型

8ch=97

9fmt.PrintfX"ch=%cn,ch|)_

.0

.1)

這里定義了,ch是一個(gè)字符類型,賦值卻是一個(gè)整數(shù)97,打印的結(jié)果是小寫字符‘a(chǎn)1.

原因是:計(jì)算機(jī)不能直接存儲(chǔ)字符類型,只能轉(zhuǎn)成數(shù)字存儲(chǔ),但是為什么小寫字符T,對(duì)應(yīng)的整數(shù)是97呢?因?yàn)?

計(jì)算機(jī)是根據(jù)‘ASCII'碼來(lái)存儲(chǔ)。(這里只是簡(jiǎn)單介紹ASCII)

ASCH表

(AmericanStandardCodeforInformationInterchange美國(guó)標(biāo)準(zhǔn)信息交換代碼)

、高四位ASCII控制字符ASCII打印字符

00000001001000110100010101100111

01234567

+進(jìn)代轉(zhuǎn)義+進(jìn)代轉(zhuǎn)義+進(jìn)+進(jìn)+進(jìn)+進(jìn)+進(jìn)+進(jìn)

字符Ctrl字符解釋字符Ctrl字符解釋字符字符字符字符字符字符Ctrl

低四位\制*字符制碼字符制制制制制制

、

000000A@NUL\o空字符16?APDLE數(shù)據(jù)鏈路轉(zhuǎn)義3248064@80P96112P

000111?AASOH標(biāo)題開(kāi)始17?AQDC1設(shè)備控制133!49165A81Q97a113q

001022■ABSTX正文開(kāi)始18tARDC2設(shè)備控制234ft50266B82R98b114r

001133▼ACETX正文結(jié)束19!!ASDC3設(shè)備控制335#51367C83S99c115s

010044ADEOT傳輸結(jié)束20ATDC4設(shè)備控制436$52468D84T100d116t

010155*AEENQ查詢21§AUNAK否定應(yīng)答37%53569E85U101e117u

011066AAFACK肯定應(yīng)答22—AVSYN同步空閑38&54670F86V102f118V

011177?AGBEL\a響鈴231AWETB傳輸塊結(jié)束3955771G87W103g119w

100088aAHBS\b退格24tAXCAN取消40(56872H88X104h120X

100199oAlHT\t橫向制表25AYEH介質(zhì)結(jié)束41)57973I89Y105i121y

AA*

1010A10sJLF\n換行26—>ZSUB替代4258:74J90Z106,i122z

1011B11dAKVT\v縱向制表27<―A[ESC\e溢出43+59975K91[107k123{

ALFF1f換頁(yè)A\FS文件分隔符\

1100C12928L44960<76L9210811241

1101D13pAMCR\r回車29一A]GS組分隔符45-61=77M931109m125}

AA

1110E14ANSO移出30▲RS記錄分隔符46?62>78N94A110n126?

ABackspace

叵15?:I移入A-US單元分隔符9

1111*"。31▼47/6379O95111o1270代碼:DEL

注:表中的ASCH字符可以用“Alt+小鍵盤上的數(shù)字鍵”方法輸入。2013/08/08

注意強(qiáng)調(diào):

5/funcmain(){

6//聲明變量

7varchbyte〃聲明字符婁生輸出指定必須%c,

8ch=97否則輸出的;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論