筆者從業(yè)互聯(lián)網(wǎng)行業(yè)多年,在工作中使用了多種后端編程語(yǔ)言,如Python、Node.js、Java等。最后經(jīng)過朋友的推薦,了解到了Go編程語(yǔ)言,筆者立刻被Go語(yǔ)言簡(jiǎn)潔易學(xué)的語(yǔ)法加上天生的高并發(fā)支持,以及便捷的部署方式所吸引。筆者在多年的開發(fā)歷程中使用Go作為后端編程語(yǔ)言,上線了大量的全棧項(xiàng)目及課程,幫助了上萬(wàn)人入門了Go語(yǔ)言開發(fā),也為Go語(yǔ)言的生態(tài)建設(shè)做出了很多個(gè)人貢獻(xiàn),所以筆者打算通過編寫書籍的形式,將Go語(yǔ)言的完整學(xué)習(xí)歷程整理并分享給讀者。
本書以Go語(yǔ)言基礎(chǔ)語(yǔ)法為核心,讀者可以通過閱讀本書,快速地掌握Go這門編程語(yǔ)言,并且?guī)椭x者在學(xué)習(xí)的過程中少走彎路。
本書主要內(nèi)容
第1章主要介紹編程語(yǔ)言的發(fā)展史,讓讀者對(duì)現(xiàn)如今的編程語(yǔ)言有一個(gè)初步的認(rèn)識(shí),以及了解Go語(yǔ)言誕生的歷史。
第2章主要介紹Go語(yǔ)言的環(huán)境搭建,都說工欲善其事,必先利其器,有一個(gè)好用的環(huán)境在往后的學(xué)習(xí)過程中是非常重要的。
第3~16章主要介紹Go語(yǔ)言的基礎(chǔ)語(yǔ)法,其中詳細(xì)地講解了數(shù)據(jù)類型、運(yùn)算符、流程控制、函數(shù)、接口、文件操作、泛型、反射、網(wǎng)絡(luò)編程等核心知識(shí)。
第17章主要介紹Go語(yǔ)言如何進(jìn)行部署,這是Go語(yǔ)言的一大優(yōu)勢(shì),這也是筆者愛上Go語(yǔ)言的一大原因。
第18章介紹生活中經(jīng)常用到的正則表達(dá)式,學(xué)會(huì)了正則表達(dá)式,處理日常數(shù)據(jù)也會(huì)更加得心應(yīng)手。
第19章介紹標(biāo)準(zhǔn)庫(kù)和常用第三方庫(kù),使用這些庫(kù)可以更好地幫助我們站在前人的肩膀上進(jìn)行功能開發(fā)。
閱讀建議
本書是一本基礎(chǔ)入門、項(xiàng)目實(shí)戰(zhàn)及原理剖析三位一體的技術(shù)教程,既提供詳細(xì)的基礎(chǔ)知識(shí)介紹,又提供了豐富的實(shí)際項(xiàng)目開發(fā)案例,包括詳細(xì)的項(xiàng)目開發(fā)步驟,每個(gè)代碼片段都有詳細(xì)的注釋標(biāo)注和對(duì)應(yīng)的操作說明。本書的基礎(chǔ)知識(shí)、項(xiàng)目實(shí)戰(zhàn)及原理剖析部分均提供了完整可運(yùn)行的代碼示例,幫助讀者更好地自學(xué)全方位的技術(shù)體系。
建議沒有Go語(yǔ)言實(shí)際開發(fā)經(jīng)驗(yàn)的讀者從頭開始按照順序詳細(xì)閱讀本書。章節(jié)劃分完全按照線性思維,由淺入深,由遠(yuǎn)及近的方式對(duì)Go語(yǔ)言進(jìn)行介紹,嚴(yán)格按照順序閱讀可以幫助讀者不會(huì)出現(xiàn)知識(shí)斷層。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應(yīng)章節(jié)的二維碼,可以在線學(xué)習(xí)。
致謝
感謝那些喜歡Go語(yǔ)言的網(wǎng)友對(duì)筆者的支持; 感謝清華大學(xué)出版社趙佳霓編輯; 感謝我的家人; 還要感謝我的朋友胡老師,他不僅是我進(jìn)入IT行業(yè)的領(lǐng)路人,而且在我工作期間對(duì)我提供了很多幫助。
由于時(shí)間倉(cāng)促,筆者水平有限,書中難免存在不妥之處,請(qǐng)讀者見諒,并提寶貴意見。
郭志勇2025年1月
教學(xué)課件(PPT)
本書源碼
第1章編程的前世今生
1.1編程語(yǔ)言發(fā)展史
1.2編程語(yǔ)言時(shí)間軸
1.3Go語(yǔ)言發(fā)展史
1.3.1Go語(yǔ)言是如何誕生的
1.3.2Go語(yǔ)言的早期團(tuán)隊(duì)和演進(jìn)歷程
1.3.3Go語(yǔ)言正式發(fā)布并開源
1.4Go語(yǔ)言特點(diǎn)
1.4.1編譯型語(yǔ)言和解釋型語(yǔ)言
1.4.2Go語(yǔ)言為并發(fā)而生
1.4.3Go語(yǔ)言設(shè)計(jì)理念
1.4.4使用Go語(yǔ)言的項(xiàng)目
1.5學(xué)好Go語(yǔ)言的建議
第2章環(huán)境搭建(8min)
2.1在Windows系統(tǒng)下搭建Go開發(fā)環(huán)境
2.1.1SDK簡(jiǎn)介
2.1.2下載SDK工具包
2.1.3配置Go環(huán)境變量
2.1.4檢查Go語(yǔ)言環(huán)境是否安裝成功
2.2Linux系統(tǒng)下搭建Go語(yǔ)言開發(fā)環(huán)境
2.2.1Linux系統(tǒng)下安裝SDK
2.2.2配置Go環(huán)境變量
2.3macOS系統(tǒng)下搭建Go語(yǔ)言開發(fā)環(huán)境
2.4Go語(yǔ)言的開發(fā)工具介紹
2.4.1工具介紹
2.4.2工具選擇
2.4.3VS Code的安裝和使用
2.4.4GoLand的安裝和使用
2.5運(yùn)行第1個(gè)程序
2.5.1Go代碼結(jié)構(gòu)介紹
2.5.2GoLand中運(yùn)行Go文件
2.5.3命令行運(yùn)行Go文件
第3章變量與基本數(shù)據(jù)類型(46min)
3.1什么是變量
3.2變量的聲明、初始化和賦值
3.3常量
3.4局部變量和全局變量
3.5變量可見性
3.6注釋
3.6.1注釋的格式
3.6.2包注釋
3.6.3命令注釋
3.6.4變量注釋
3.7規(guī)范的代碼風(fēng)格
3.8數(shù)據(jù)類型的基本介紹
3.8.1數(shù)字類型
3.8.2浮點(diǎn)數(shù)類型
3.8.3字符串類型
3.8.4布爾類型
3.8.5字符類型
3.9擴(kuò)展字符編碼
3.9.1ASCII第1個(gè)編碼集合的誕生及發(fā)展
3.9.2GBK編碼的誕生及發(fā)展
3.9.3Unicode編碼的誕生
3.9.4UTF系列編碼的誕生及發(fā)展
3.9.5擴(kuò)展亂碼之王錕斤拷
3.10基本數(shù)據(jù)類型的默認(rèn)值
3.11類型轉(zhuǎn)換
3.11.1顯式類型轉(zhuǎn)換
3.11.2隱式類型轉(zhuǎn)換
3.11.3strconv包
3.12輸入函數(shù)
3.12.1Scanf函數(shù)
3.12.2Scanln函數(shù)
3.12.3Scan函數(shù)
第4章運(yùn)算符(3min)
4.1運(yùn)算符基本介紹
4.2賦值運(yùn)算符
4.3算術(shù)運(yùn)算符
4.4關(guān)系運(yùn)算符
4.5邏輯運(yùn)算符
4.6位運(yùn)算符
4.6.1按位與
4.6.2按位或
4.6.3按位異或
4.6.4按位左移
4.6.5按位右移
4.7運(yùn)算符的優(yōu)先級(jí)
第5章流程控制(26min)
5.1條件判斷
5.1.1if單分支
5.1.2ifelse雙分支
5.1.3ifelseif多分支
5.1.4if嵌套
5.1.5知識(shí)擴(kuò)展衛(wèi)語(yǔ)句
5.2switch語(yǔ)句
5.3循環(huán)語(yǔ)句
5.3.1標(biāo)準(zhǔn)for循環(huán)
5.3.2while模式的for循環(huán)
5.3.3dowhile模式的for循環(huán)
5.3.4for range模式的for循環(huán)
5.3.5break語(yǔ)句
5.3.6continue語(yǔ)句
5.3.7多重循環(huán)
第6章數(shù)組、切片、Map(27min)
6.1數(shù)組
6.1.1聲明數(shù)組
6.1.2初始化數(shù)組
6.1.3數(shù)組索引
6.1.4修改數(shù)組元素
6.1.5遍歷數(shù)組
6.2切片
6.2.1什么是切片
6.2.2切片的創(chuàng)建和初始化
6.2.3nil和空切片
6.2.4為切片中的元素賦值
6.2.5通過切片創(chuàng)建新的切片
6.2.6遍歷切片
6.2.7append()函數(shù)
6.2.8切片的底層原理
6.3map
6.3.1map的聲明與初始化
6.3.2map的增、刪、改、查
6.3.3map的底層實(shí)現(xiàn)
第7章函數(shù)與指針(50min)
7.1函數(shù)
7.1.1函數(shù)定義
7.1.2函數(shù)參數(shù)
7.1.3函數(shù)返回值
7.1.4匿名函數(shù)
7.1.5函數(shù)可作為參數(shù)
7.1.6函數(shù)可作為返回值
7.1.7函數(shù)作為變量
7.2特殊的函數(shù)
7.2.1main()函數(shù)
7.2.2init()函數(shù)
7.2.3defer()函數(shù)
7.2.4遞歸函數(shù)
7.3指針
7.3.1指針地址和指針類型
7.3.2指針取值
7.3.3空指針
7.3.4new
7.3.5make
第8章結(jié)構(gòu)體與自定義數(shù)據(jù)類型(29min)
8.1結(jié)構(gòu)體
8.1.1結(jié)構(gòu)體定義
8.1.2結(jié)構(gòu)體實(shí)例化
8.1.3結(jié)構(gòu)體方法
8.1.4結(jié)構(gòu)體匿名字段
8.1.5嵌套結(jié)構(gòu)體
8.1.6結(jié)構(gòu)體的繼承
8.1.7結(jié)構(gòu)體標(biāo)簽
8.1.8結(jié)構(gòu)體內(nèi)存布局
8.2自定義數(shù)據(jù)類型與類型別名
8.2.1自定義類型
8.2.2自定義類型方法
8.2.3類型別名
8.2.4自定義類型和類型別名的區(qū)別
第9章接口(16min)
9.1Go接口interface
9.1.1接口的定義
9.1.2接口的實(shí)現(xiàn)
9.1.3接口的使用
9.1.4接口嵌套
9.1.5類型斷言
9.2空接口
第10章協(xié)程與Channel(27min)
10.1何為協(xié)程
10.1.1WaitGroup
10.1.2WaitGroup原理探析
10.2Channel信道
10.2.1Channel類型
10.2.2創(chuàng)建Channel
10.2.3操作Channel
10.2.4無(wú)緩沖的Channel
10.2.5有緩沖的Channel
10.2.6從Channel中循環(huán)取值
10.3select
10.3.1select特點(diǎn)
10.3.2帶default的語(yǔ)句
10.3.3不帶default的語(yǔ)句
10.3.4關(guān)閉Channel監(jiān)聽
10.3.5空的select將一直阻塞
10.3.6select定時(shí)器
10.4協(xié)程的設(shè)計(jì)與原理
10.4.1單進(jìn)程時(shí)代
10.4.2多進(jìn)程時(shí)代
10.4.3多線程時(shí)代
10.4.4協(xié)程時(shí)代
10.4.5協(xié)程的調(diào)度
10.4.6Go語(yǔ)言協(xié)程調(diào)度
第11章線程安全與異常處理(25min)
11.1線程為什么不安全
11.2如何解決線程安全問題
11.2.1互斥鎖
11.2.2讀寫鎖
11.2.3一次性鎖
11.2.4sync.Pool
11.3線程安全sync.Map
11.3.1sync.Map基本用法
11.3.2sync.Map為什么快
11.4異常處理
11.4.1自定義錯(cuò)誤
11.4.2錯(cuò)誤的處理方式
第12章泛型(7min)
12.1泛型函數(shù)
12.1.1泛型約束
12.1.2指定底層類型
12.1.3可比較類型
12.1.4多參數(shù)泛型
12.1.5泛型嵌套
12.1.6常用泛型函數(shù)
12.2泛型結(jié)構(gòu)體
12.3泛型切片
12.4泛型map
12.5泛型Channel
第13章文件操作(53min)
13.1相對(duì)路徑與絕對(duì)路徑
13.2文件讀取
13.2.1一次性讀取
13.2.2分片讀取
13.2.3按行讀取
13.3文件寫入
13.3.1一次性寫入
13.3.2逐行寫入
13.3.3使用緩沖寫入
13.3.4os.OpenFile()函數(shù)
13.4目錄操作
13.4.1創(chuàng)建目錄
13.4.2讀取目錄
13.4.3遍歷目錄
13.4.4目錄的其他操作
13.5JSON文件操作
13.5.1JSON序列化
13.5.2JSON反序列化
13.6I/O接口
13.6.1io.Reader接口
13.6.2io.Writer接口
13.6.3io.Closer接口
13.6.4統(tǒng)一的抽象層
13.6.5最小接口原則
13.7命令行參數(shù)
13.7.1什么是命令行參數(shù)
13.7.2使用os.Args獲取命令行參數(shù)
13.7.3使用flag包解析命令行參數(shù)
第14章單元測(cè)試與包管理
14.1最簡(jiǎn)單的測(cè)試
14.2單元測(cè)試的基本規(guī)范
14.3單元測(cè)試的常用方法
14.3.1表驅(qū)動(dòng)測(cè)試
14.3.2隨機(jī)執(zhí)行
14.3.3子測(cè)試
14.3.4TestMain()函數(shù)
14.4基準(zhǔn)測(cè)試
14.5包管理
14.5.1Go包的概念
14.5.2包的導(dǎo)入與可見性
14.5.3Go依賴管理的概念
14.5.4go mod的使用
第15章反射(13min)
15.1反射的優(yōu)點(diǎn)與缺點(diǎn)
15.2reflect包
15.2.1type Type 類型
15.2.2type Kind類型
15.2.3TypeOf常用方法
15.2.4ValueOf常用方法
第16章網(wǎng)絡(luò)編程(8min)
16.1HTTP編程
16.1.1HTTP服務(wù)器端
16.1.2HTTP客戶端
16.2HTTP協(xié)議
16.2.1HTTP協(xié)議的發(fā)展歷程
16.2.2HTTP協(xié)議會(huì)話方式
16.2.3請(qǐng)求報(bào)文
16.2.4響應(yīng)報(bào)文
16.3TCP編程
16.3.1標(biāo)準(zhǔn)收發(fā)模式
16.3.2聊天收發(fā)模式
16.4TCP協(xié)議
16.4.1OSI七層模型
16.4.2TCP報(bào)文
16.4.3三次握手
16.4.4四次揮手
16.5UDP編程
16.5.1UDP優(yōu)勢(shì)
16.5.2UDP服務(wù)器端
16.5.3UDP客戶端
16.5.4UDP應(yīng)用場(chǎng)景
第17章部署(13min)
17.1打包命令
17.2交叉編譯
17.3文件嵌入
17.3.1嵌入單個(gè)文件
17.3.2嵌入多個(gè)文件
17.3.3嵌入目錄
第18章正則表達(dá)式
18.1正則表達(dá)式概述
18.2正則表達(dá)式基本語(yǔ)法
18.2.1字符集合
18.2.2字符范圍
18.2.3數(shù)量字符
18.2.4元字符
18.2.5特殊字符
18.2.6位置匹配
18.2.7分組
18.2.8修飾符
18.3Go語(yǔ)言中使用正則表達(dá)式
18.3.1字符串匹配
18.3.2分組匹配
18.3.3分組替換
18.3.4標(biāo)志
18.4常用正則表達(dá)式
第19章標(biāo)準(zhǔn)庫(kù)和常用第三方庫(kù)(43min)
19.1Go標(biāo)準(zhǔn)庫(kù)
19.1.1時(shí)間和日期
19.1.2數(shù)學(xué)
19.1.3日志
19.1.4上下文
19.2Go常用第三方庫(kù)
19.2.1logrus日志庫(kù)
19.2.2gin
19.2.3定時(shí)任務(wù)