本書以Go語言為主線,內(nèi)容循序漸進,采用先實踐再理論的學習模式。引導讀者漸進式地學習Go語言的相關知識,并對其中的相關內(nèi)容產(chǎn)生濃厚的興趣。
本書共19章,從第1章編程語言的前世今生開始,系統(tǒng)性講解編程語言的時間線及Go語言的誕生歷史。第2章環(huán)境搭建詳細講解了不同的操作系統(tǒng)搭建Go語言開發(fā)環(huán)境的過程。第3~19章是Go語言最為核心的內(nèi)容部分,內(nèi)容按照從實踐到原理循序漸進的過程設計。本書示例代碼豐富,實際性和系統(tǒng)性較強,并配有視頻講解,助力讀者透徹理解書中的重點、難點。
本書既適合初學者入門,精心設計的案例對于工作多年的開發(fā)者也有參考價值,并可作為高等院校和培訓機構相關專業(yè)的教學參考書。
本書是一本基礎入門、項目實戰(zhàn)及原理剖析三位一體的技術教程,既包括詳細的基礎知識介紹,又提供了豐富的實際項目開發(fā)案例,包括詳細的項目開發(fā)步驟,每個代碼片段都有詳細的注釋標注和對應的操作說明。本書的基礎知識、項目實戰(zhàn)及原理剖析部分均提供了完整可運行的代碼示例,幫助讀者更好地自學全方位的技術體系。
筆者從業(yè)互聯(lián)網(wǎng)行業(yè)多年,在工作中使用了多種后端編程語言,如Python、Node.js、Java等。最后經(jīng)過朋友的推薦,了解到了Go編程語言,筆者立刻被Go語言簡潔易學的語法加上天生的高并發(fā)支持,以及便捷的部署方式所吸引。筆者在多年的開發(fā)歷程中使用Go作為后端編程語言,上線了大量的全棧項目及課程,幫助了上萬人入門了Go語言開發(fā),也為Go語言的生態(tài)建設做出了很多個人貢獻,所以筆者打算通過編寫書籍的形式,將Go語言的完整學習歷程整理并分享給讀者。
本書以Go語言基礎語法為核心,讀者可以通過閱讀本書,快速地掌握Go這門編程語言,并且?guī)椭x者在學習的過程中少走彎路。
本書主要內(nèi)容
第1章主要介紹編程語言的發(fā)展史,讓讀者對現(xiàn)如今的編程語言有一個初步的認識,以及了解Go語言誕生的歷史。
第2章主要介紹Go語言的環(huán)境搭建,都說工欲善其事,必先利其器,有一個好用的環(huán)境在往后的學習過程中是非常重要的。
第3~16章主要介紹Go語言的基礎語法,其中詳細地講解了數(shù)據(jù)類型、運算符、流程控制、函數(shù)、接口、文件操作、泛型、反射、網(wǎng)絡編程等核心知識。
第17章主要介紹Go語言如何進行部署,這是Go語言的一大優(yōu)勢,這也是筆者愛上Go語言的一大原因。
第18章介紹生活中經(jīng)常用到的正則表達式,學會了正則表達式,處理日常數(shù)據(jù)也會更加得心應手。
第19章介紹標準庫和常用第三方庫,使用這些庫可以更好地幫助我們站在前人的肩膀上進行功能開發(fā)。
閱讀建議
本書是一本基礎入門、項目實戰(zhàn)及原理剖析三位一體的技術教程,既提供詳細的基礎知識介紹,又提供了豐富的實際項目開發(fā)案例,包括詳細的項目開發(fā)步驟,每個代碼片段都有詳細的注釋標注和對應的操作說明。本書的基礎知識、項目實戰(zhàn)及原理剖析部分均提供了完整可運行的代碼示例,幫助讀者更好地自學全方位的技術體系。
建議沒有Go語言實際開發(fā)經(jīng)驗的讀者從頭開始按照順序詳細閱讀本書。章節(jié)劃分完全按照線性思維,由淺入深,由遠及近的方式對Go語言進行介紹,嚴格按照順序閱讀可以幫助讀者不會出現(xiàn)知識斷層。
資源下載提示
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
視頻等資源: 掃描封底的文泉云盤防盜碼,再掃描書中相應章節(jié)的二維碼,可以在線學習。
致謝
感謝那些喜歡Go語言的網(wǎng)友對筆者的支持; 感謝清華大學出版社趙佳霓編輯; 感謝我的家人; 還要感謝我的朋友胡老師,他不僅是我進入IT行業(yè)的領路人,而且在我工作期間對我提供了很多幫助。
由于時間倉促,筆者水平有限,書中難免存在不妥之處,請讀者見諒,并提寶貴意見。
郭志勇2025年1月
教學課件(PPT)
本書源碼
郭志勇,一個在IT領域摸爬滾打多年的程序員、培訓師。掌握多種IT技術,如前端開發(fā)、Python語言開發(fā)、Go語言開發(fā)等。熱愛技術交流與分享,其錄制的8小時入門Go語言開發(fā)Gin框架入門Gorm簡明教程gRPC基礎教程GoZero零基礎教程等相關Go語言領域基礎課程,幫助上萬人入門Go語言開發(fā),廣受學員好評。
第1章編程的前世今生
1.1編程語言發(fā)展史
1.2編程語言時間軸
1.3Go語言發(fā)展史
1.3.1Go語言是如何誕生的
1.3.2Go語言的早期團隊和演進歷程
1.3.3Go語言正式發(fā)布并開源
1.4Go語言特點
1.4.1編譯型語言和解釋型語言
1.4.2Go語言為并發(fā)而生
1.4.3Go語言設計理念
1.4.4使用Go語言的項目
1.5學好Go語言的建議
第2章環(huán)境搭建(8min)
2.1在Windows系統(tǒng)下搭建Go開發(fā)環(huán)境
2.1.1SDK簡介
2.1.2下載SDK工具包
2.1.3配置Go環(huán)境變量
2.1.4檢查Go語言環(huán)境是否安裝成功
2.2Linux系統(tǒng)下搭建Go語言開發(fā)環(huán)境
2.2.1Linux系統(tǒng)下安裝SDK
2.2.2配置Go環(huán)境變量
2.3macOS系統(tǒng)下搭建Go語言開發(fā)環(huán)境
2.4Go語言的開發(fā)工具介紹
2.4.1工具介紹
2.4.2工具選擇
2.4.3VS Code的安裝和使用
2.4.4GoLand的安裝和使用
2.5運行第1個程序
2.5.1Go代碼結構介紹
2.5.2GoLand中運行Go文件
2.5.3命令行運行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ī)范的代碼風格
3.8數(shù)據(jù)類型的基本介紹
3.8.1數(shù)字類型
3.8.2浮點數(shù)類型
3.8.3字符串類型
3.8.4布爾類型
3.8.5字符類型
3.9擴展字符編碼
3.9.1ASCII第1個編碼集合的誕生及發(fā)展
3.9.2GBK編碼的誕生及發(fā)展
3.9.3Unicode編碼的誕生
3.9.4UTF系列編碼的誕生及發(fā)展
3.9.5擴展亂碼之王錕斤拷
3.10基本數(shù)據(jù)類型的默認值
3.11類型轉換
3.11.1顯式類型轉換
3.11.2隱式類型轉換
3.11.3strconv包
3.12輸入函數(shù)
3.12.1Scanf函數(shù)
3.12.2Scanln函數(shù)
3.12.3Scan函數(shù)
第4章運算符(3min)
4.1運算符基本介紹
4.2賦值運算符
4.3算術運算符
4.4關系運算符
4.5邏輯運算符
4.6位運算符
4.6.1按位與
4.6.2按位或
4.6.3按位異或
4.6.4按位左移
4.6.5按位右移
4.7運算符的優(yōu)先級
第5章流程控制(26min)
5.1條件判斷
5.1.1if單分支
5.1.2ifelse雙分支
5.1.3ifelseif多分支
5.1.4if嵌套
5.1.5知識擴展衛(wèi)語句
5.2switch語句
5.3循環(huán)語句
5.3.1標準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語句
5.3.6continue語句
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的底層實現(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章結構體與自定義數(shù)據(jù)類型(29min)
8.1結構體
8.1.1結構體定義
8.1.2結構體實例化
8.1.3結構體方法
8.1.4結構體匿名字段
8.1.5嵌套結構體
8.1.6結構體的繼承
8.1.7結構體標簽
8.1.8結構體內(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接口的實現(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無緩沖的Channel
10.2.5有緩沖的Channel
10.2.6從Channel中循環(huán)取值
10.3select
10.3.1select特點
10.3.2帶default的語句
10.3.3不帶default的語句
10.3.4關閉Channel監(jiān)聽
10.3.5空的select將一直阻塞
10.3.6select定時器
10.4協(xié)程的設計與原理
10.4.1單進程時代
10.4.2多進程時代
10.4.3多線程時代
10.4.4協(xié)程時代
10.4.5協(xié)程的調(diào)度
10.4.6Go語言協(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自定義錯誤
11.4.2錯誤的處理方式
第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泛型結構體
12.3泛型切片
12.4泛型map
12.5泛型Channel
第13章文件操作(53min)
13.1相對路徑與絕對路徑
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章單元測試與包管理
14.1最簡單的測試
14.2單元測試的基本規(guī)范
14.3單元測試的常用方法
14.3.1表驅動測試
14.3.2隨機執(zhí)行
14.3.3子測試
14.3.4TestMain()函數(shù)
14.4基準測試
14.5包管理
14.5.1Go包的概念
14.5.2包的導入與可見性
14.5.3Go依賴管理的概念
14.5.4go mod的使用
第15章反射(13min)
15.1反射的優(yōu)點與缺點
15.2reflect包
15.2.1type Type 類型
15.2.2type Kind類型
15.2.3TypeOf常用方法
15.2.4ValueOf常用方法
第16章網(wǎng)絡編程(8min)
16.1HTTP編程
16.1.1HTTP服務器端
16.1.2HTTP客戶端
16.2HTTP協(xié)議
16.2.1HTTP協(xié)議的發(fā)展歷程
16.2.2HTTP協(xié)議會話方式
16.2.3請求報文
16.2.4響應報文
16.3TCP編程
16.3.1標準收發(fā)模式
16.3.2聊天收發(fā)模式
16.4TCP協(xié)議
16.4.1OSI七層模型
16.4.2TCP報文
16.4.3三次握手
16.4.4四次揮手
16.5UDP編程
16.5.1UDP優(yōu)勢
16.5.2UDP服務器端
16.5.3UDP客戶端
16.5.4UDP應用場景
第17章部署(13min)
17.1打包命令
17.2交叉編譯
17.3文件嵌入
17.3.1嵌入單個文件
17.3.2嵌入多個文件
17.3.3嵌入目錄
第18章正則表達式
18.1正則表達式概述
18.2正則表達式基本語法
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語言中使用正則表達式
18.3.1字符串匹配
18.3.2分組匹配
18.3.3分組替換
18.3.4標志
18.4常用正則表達式
第19章標準庫和常用第三方庫(43min)
19.1Go標準庫
19.1.1時間和日期
19.1.2數(shù)學
19.1.3日志
19.1.4上下文
19.2Go常用第三方庫
19.2.1logrus日志庫
19.2.2gin
19.2.3定時任務