關(guān)于我們
書單推薦
新書推薦
|
Go語言從入門到精通
本書主要內(nèi)容包括Go語言簡(jiǎn)介、開發(fā)環(huán)境準(zhǔn)備、快速基礎(chǔ)入門、數(shù)學(xué)科學(xué)領(lǐng)域的計(jì)算、開發(fā)一個(gè)自己的日常命令行工具、文件處理、數(shù)據(jù)格式分析與轉(zhuǎn)換、正則表達(dá)式、并發(fā)處理、數(shù)據(jù)采集和清理應(yīng)用、網(wǎng)絡(luò)服務(wù)端應(yīng)用、Web服務(wù)器、加密解密領(lǐng)域應(yīng)用、網(wǎng)絡(luò)提供的各種API、常用Go語言技術(shù)的示例與研究、實(shí)用函數(shù)實(shí)例等。安排了大量實(shí)例代碼,介紹相關(guān)編程知識(shí)。
1. 實(shí)例豐富,書中配有數(shù)百個(gè)Go語言開發(fā)案例,上手容易。
2. 實(shí)用技術(shù)大全,包羅Go語言開發(fā)方方面面,從入門到進(jìn)階實(shí)戰(zhàn)。
3. 配套資源豐富,配有多媒體課件、源代碼、視頻等資源。
謝瓊,計(jì)算機(jī)軟件、通信行業(yè)和外語在線教育領(lǐng)域?qū)<遥瑖艺J(rèn)證系統(tǒng)分析師。在大型國企和世界50強(qiáng)IT跨國公司從事計(jì)算機(jī)系統(tǒng)、電信行業(yè)項(xiàng)目、外語在線教育項(xiàng)目、人工智能/深度學(xué)習(xí)領(lǐng)域項(xiàng)目多年,曾主持編寫國家電信行業(yè)安全標(biāo)準(zhǔn),項(xiàng)目經(jīng)驗(yàn)豐富,是人工智能英語分析系統(tǒng)“小仙英語伴讀”的創(chuàng)始人。精通十幾種計(jì)算機(jī)語言,擅長理論的落地、實(shí)用化,長期擔(dān)任企業(yè)內(nèi)部培訓(xùn)講師和整體方案咨詢講師,課程教授方式深入淺出,對(duì)實(shí)例的講解簡(jiǎn)單易懂,易于理解,尤其適合入門學(xué)習(xí)者。
目 錄
第1章 Go語言簡(jiǎn)介 1
1.1 Go語言的發(fā)展歷史 1
1.2 Go語言的主要特點(diǎn) 1
第2章 開發(fā)環(huán)境準(zhǔn)備 4
2.1 安裝Go語言 4
2.1.1 Windows系統(tǒng)下安裝Go語言 4
2.1.2 Mac OS X系統(tǒng)下安裝Go語言 8
2.1.3 Linux系統(tǒng)下安裝Go語言 8
2.2 打造更舒適的開發(fā)環(huán)境 9
2.2.1 修改Windows資源管理器的一些
顯示設(shè)置 9
2.2.2 命令提示符CMD的替代方案 9
2.2.3 文本文件編輯器 11
2.3 Go語言開發(fā)工具的選擇 11
2.3.1 LiteIDE 11
2.3.2 Visual Studio Code加Go語言
插件 11
2.3.3 其他開發(fā)工具 14
第3章 Go語言快速入門 15
3.1 初識(shí)Go語言——編寫、編譯和運(yùn)行 15
3.1.1 怎樣輸入Go語言程序 15
3.1.2 怎樣編譯Go語言程序 17
3.1.3 怎樣執(zhí)行Go語言程序 18
3.1.4 怎樣查看Go語言的文檔 19
3.2 Go語言程序的組織 20
3.2.1 Go語言中程序文件的組織方式 20
3.2.2 非執(zhí)行包與包的引用 22
3.2.3 自己編寫非執(zhí)行包 23
3.2.4 非執(zhí)行包名與目錄的關(guān)系 24
3.2.5 用多級(jí)子目錄組織包結(jié)構(gòu) 25
3.3 關(guān)鍵字等語言要素 26
3.4 變量 26
3.4.1 變量的基本概念 26
3.4.2 浮點(diǎn)數(shù)類型的變量 28
3.4.3 字符串類型的變量 29
3.4.4 布爾類型的變量 29
3.4.5 變量的命名 30
3.4.6 變量聲明和賦值的簡(jiǎn)化形式 31
3.4.7 復(fù)合類型的變量 32
3.4.8 變量類型的轉(zhuǎn)換 34
3.4.9 指針類型的變量 35
3.4.10 變量的零值 36
3.5 表達(dá)式 37
3.6 函數(shù)(方法) 37
3.7 自定義數(shù)據(jù)類型 40
3.8 面向?qū)ο缶幊獭?2
3.9 條件判斷與分支 45
3.10 循環(huán) 46
3.11 并發(fā)處理:Go例程 48
3.12 注釋 49
3.13 程序編譯或運(yùn)行時(shí)出現(xiàn)錯(cuò)誤 50
3.14 總結(jié)的代碼 51
第4章 Go語言的基本語法與
開發(fā)基礎(chǔ) 52 4.1 Go語言語法要素與代碼規(guī)范 52 4.1.1 文件和字符串編碼 52 4.1.2 語句、代碼塊與執(zhí)行順序 53 4.1.3 語句分隔 53 4.1.4 語法記號(hào) 53 4.2 代碼格式化工具gofmt 54 4.3 常用的輔助性內(nèi)置函數(shù) 55 4.3.1 內(nèi)置的輸出信息函數(shù)print與 println 55 4.3.2 獲取數(shù)據(jù)長度的len函數(shù) 56 4.3.3 獲取變量容量的cap函數(shù) 57 4.3.4 用于復(fù)合類型數(shù)據(jù)的操作函數(shù) 57 4.3.5 用于處理異常的函數(shù) 58 4.4 格式化輸出函數(shù)fmt.Printf 58 4.4.1 整數(shù)格式化符%d 60 4.4.2 十六進(jìn)制格式化符%x和%X 61 4.4.3 二進(jìn)制格式化符%b 62 4.4.4 浮點(diǎn)數(shù)格式化符%f 62 4.4.5 其他浮點(diǎn)數(shù)格式化符 63 4.4.6 布爾類型的格式化符%t 64 4.4.7 Unicode碼相關(guān)格式化符%c、 %q和%U 64 4.4.8 字符串格式化符%s 65 4.4.9 指針格式化符%p 66 4.4.10 萬能格式化符 %v 66 4.4.11 輸出數(shù)值類型的格式化符%T 68 4.4.12 輸出%字符本身 68 4.5 獲取和使用第三方包 68 4.6 定義和使用常量 70 4.7 變量、函數(shù)等標(biāo)識(shí)符聲明的作用范圍 72 4.8 tools包——編寫自己的函數(shù)庫 74 第5章 用Go語言進(jìn)行數(shù)學(xué)、科學(xué) 領(lǐng)域的計(jì)算 76 5.1 表達(dá)式 76 5.1.1 最簡(jiǎn)單的表達(dá)式——單個(gè)數(shù)值 76 5.1.2 操作符在表達(dá)式中的作用 76 5.1.3 函數(shù)在表達(dá)式中的作用 79 5.1.4 表達(dá)式的組合與計(jì)算的優(yōu)先級(jí) 80 5.1.5 表達(dá)式中數(shù)據(jù)類型的一致性要求 81 5.2 用表達(dá)式進(jìn)行數(shù)學(xué)計(jì)算 81 5.2.1 體重指數(shù) 81 5.2.2 用表達(dá)式計(jì)算體重指數(shù) 82 5.2.3 使用命令行參數(shù)傳入體重和 身高的變量值 83 5.3 利用系統(tǒng)自帶的數(shù)學(xué)庫進(jìn)行計(jì)算 85 5.3.1 查閱Go語言中的參考文檔 85 5.3.2 使用math.Pow函數(shù)進(jìn)行平方 計(jì)算 86 5.3.3 用math/rand包生成隨機(jī)數(shù) 87 5.4 用Go語言進(jìn)行科學(xué)計(jì)算 90 5.4.1 向量與余弦相似度概念簡(jiǎn)介 90 5.4.2 計(jì)算向量余弦相似度的函數(shù) 91 5.5 使用math/big包避免計(jì)算過程中 超大數(shù)溢出 93 5.5.1 big包的基本使用方法 93 5.5.2 用big包改進(jìn)余弦相似度計(jì)算 函數(shù) 94 5.6 計(jì)算中的異常處理 95 5.6.1 Go語言中的匿名函數(shù) 95 5.6.2 Go語言的延遲處理機(jī)制 97 5.6.3 Go語言的異常處理機(jī)制 98 5.6.4 處理計(jì)算中的異!100 5.6.5 Go語言中異常的傳遞順序 107 5.6.6 使用runtime庫輸出更多的異常 信息 108 5.7 使用第三方包進(jìn)行更復(fù)雜的數(shù)學(xué) 計(jì)算 109 5.7.1 Gonum包中用于矩陣運(yùn)算的mat 子包簡(jiǎn)介 109 5.7.2 矩陣乘法的計(jì)算過程 109 5.7.3 用gonum/mat子包實(shí)現(xiàn)矩陣 乘法 110 第6章 用Go語言開發(fā)一個(gè) 命令行工具 113 6.1 命令行工具簡(jiǎn)介 113 6.2 典型命令行工具的架構(gòu) 113 6.3 基本的命令行工具clix程序框架 114 6.4 Go語言中的switch語句 115 6.5 clix的第一個(gè)命令:version 118 6.6 增加體重指數(shù)計(jì)算命令calbmi 118 6.6.1 tools包中增加判斷起始 子字符串的函數(shù) 118 6.6.2 子字符串的截取 119 6.6.3 tools包中增加判斷標(biāo)志參數(shù)的 函數(shù) 120 6.6.4 編寫clix中的calbmi命令 120 6.6.5 增加命令行開關(guān)標(biāo)志參數(shù) 121 6.6.6 使用flag包來分析命令行參數(shù) 123 6.7 第三個(gè)命令:數(shù)字排序 125 6.7.1 循環(huán)進(jìn)階 125 6.7.2 冒泡法排序 130 6.7.3 用雙重循環(huán)實(shí)現(xiàn)冒泡法排序 131 6.7.4 命令行參數(shù)中傳入數(shù)字序列 131 6.7.5 在clix程序中加入冒泡法 排序的命令 133 6.8 Go語言中對(duì)典型代碼邏輯結(jié)構(gòu)的 支持 133 6.8.1 基本的代碼結(jié)構(gòu) 134 6.8.2 利用標(biāo)簽跳出或繼續(xù)外層循環(huán) 134 6.8.3 goto語句無條件跳轉(zhuǎn) 136 6.8.4 遞歸(調(diào)用自身函數(shù)) 137 第7章 Go語言中的字符串處理 138 7.1 字符串相關(guān)的基礎(chǔ)知識(shí) 138 7.1.1 字符串的基本概念 138 7.1.2 byte、uint8和int8類型 138 7.1.3 byte類型的切片([]byte)與 string 140 7.1.4 字符串的基本操作:取長度、 連接、截取等 140 7.1.5 用雙引號(hào)或反引號(hào)括起字符串的 區(qū)別 141 7.2 字符串支持多語言編碼的特殊 處理 141 7.2.1 UTF-8編碼 142 7.2.2 rune類型和rune類型切片 143 7.2.3 用rune對(duì)字符串進(jìn)行遍歷 144 7.3 常見的字符串操作 145 7.3.1 判斷字符串中是否含有某個(gè)子串 145 7.3.2 獲取字符串中子串的位置 146 7.3.3 獲取字符串中子串第n次出現(xiàn)的 位置 146 7.3.4 統(tǒng)計(jì)字符串中子串出現(xiàn)的次數(shù) 148 7.3.5 判斷字符串的起始或結(jié)尾子串 148 7.3.6 比較兩個(gè)字符串 149 7.3.7 去除字符串首尾空白或其他字符 150 7.3.8 替換字符串中的子串 152 7.3.9 字符串大小寫的轉(zhuǎn)換 152 7.3.10 切分字符串 153 7.3.11 合并字符串切片 154 7.3.12 生成重復(fù)子串組成的字符串 155 7.3.13 幾個(gè)Unicode操作 155 7.4 高級(jí)字符串操作 157 7.4.1 生成隨機(jī)字符串 157 7.4.2 用strings.Builder實(shí)現(xiàn)不斷增長的 字符串 159 7.4.3 用于讀取字符串內(nèi)容的 strings.Reader 161 7.4.4 字符串與數(shù)字的相互轉(zhuǎn)化 162 7.4.5 用fmt.Sprintf實(shí)現(xiàn)靈活的字符串 處理 169 7.4.6 用fmt.Sscanf從字符串中讀取 信息 170 第8章 Go語言中的正則表達(dá)式 173 8.1 正則表達(dá)式的基本概念與用法 173 8.1.1 用正則表達(dá)式判斷字符串是否 含有符合一定規(guī)則的子串 173 8.1.2 用正則表達(dá)式從字符串中提取 符合一定規(guī)則的子串 174 8.1.3 用通配符“.”匹配任意字符 175 8.1.4 貪婪與非貪婪匹配 176 8.1.5 分組提取子串 177 8.1.6 提取所有符合條件的帶捕獲組的 匹配結(jié)果 178 8.1.7 替換符合正則表達(dá)式的子串 179 8.1.8 轉(zhuǎn)義字符 180 8.2 正則表達(dá)式進(jìn)階知識(shí) 181 8.2.1 單個(gè)字符的表達(dá) 181 8.2.2 表達(dá)字符出現(xiàn)的次數(shù)(數(shù)量) 184 8.2.3 非字符匹配(位置匹配) 185 8.2.4 正則表達(dá)式中使用標(biāo)志位進(jìn)行 設(shè)置 186 8.2.5 可選子串匹配 187 8.2.6 非捕獲組 187 8.2.7 獲取匹配到子串的索引位置 188 8.2.8 用正則表達(dá)式分割字符串 188 8.2.9 判斷整個(gè)字符串是否匹配正則 表達(dá)式 189 8.2.10 按字節(jié)進(jìn)行正則表達(dá)式匹配 189 第9章 Go語言文件處理 190 9.1 Go語言中文本文件的處理 190 9.1.1 文本文件的編碼 190 9.1.2 文本文件的打開、讀取與關(guān)閉等 基本操作 191 9.1.3 從較大的文本文件中讀取完整 內(nèi)容 193 9.1.4 較簡(jiǎn)單的讀取完整文本的方法 194 9.1.5 更簡(jiǎn)單的讀取完整文本的方法 195 9.1.6 從文本文件中讀取指定 數(shù)量的行 196 9.1.7 將字符串寫入文本文件 198 9.1.8 向已有的文本文件中追加內(nèi)容 199 9.1.9 用移動(dòng)文件指針的方法向 文件中追加內(nèi)容 200 9.1.10 文件、目錄的其他基本操作 201 9.1.11 文本文件編碼轉(zhuǎn)換 208 9.1.12 文本排序 215 9.1.13 超大文本文件排序 218 9.1.14 文本查重、去重 219 9.2 Go語言中二進(jìn)制文件的處理 219 9.2.1 Go語言中用二進(jìn)制文件存儲(chǔ) 數(shù)據(jù) 219 9.2.2 自定義文件格式存儲(chǔ)大量數(shù)據(jù) 記錄 224 9.3 文件處理總結(jié) 227 第10章 Go語言中數(shù)據(jù)格式的 分析與轉(zhuǎn)換 229 10.1 常見的數(shù)據(jù)交換格式 229 10.2 XML格式的處理 229 10.2.1 將數(shù)據(jù)序列化成XML格式 229 10.2.2 將XML格式的文本反序列化 232 10.2.3 省略字段、字符字段和原始 XML文本字段 234 10.2.4 自行控制某數(shù)據(jù)類型的XML 序列化/反序列化 235 10.3 JSON格式的處理 237 10.3.1 將數(shù)據(jù)序列化成JSON格式 237 10.3.2 將JSON格式的文本反序列化 239 10.3.3 JSON序列化/反序列化時(shí)使用 描述字符串 240 10.3.4 自行控制自定義數(shù)據(jù)類型的 JSON序列化/反序列化 242 10.3.5 用空接口類型實(shí)現(xiàn)復(fù)雜結(jié)構(gòu)的 JSON序列化 244 10.3.6 JSON解析中空接口類型的 應(yīng)用 246 10.3.7 使用第三方包進(jìn)行JSON格式的 序列化與反序列化 248 第11章 Go語言的并發(fā)處理 250 11.1 Go語言并發(fā)編程基礎(chǔ) 250 11.2 并發(fā)處理時(shí)的共享沖突 253 11.3 使用通道類型實(shí)現(xiàn)安全的數(shù)據(jù)共享 255 11.4 使用通道作為數(shù)據(jù)訪問的令牌 257 11.5 使用通道實(shí)現(xiàn)多任務(wù)的歸并 258 11.6 用select實(shí)現(xiàn)多通道的歸并 260 11.7 select中實(shí)現(xiàn)超時(shí)中止 262 11.8 用單向通道自定義超時(shí)函數(shù) 263 11.9 使用sync包進(jìn)行傳統(tǒng)的并發(fā)處理 265 11.9.1 用sync.WaitGroup實(shí)現(xiàn) goroutine歸并 266 11.9.2 用鎖(互斥量)實(shí)現(xiàn) goroutine同步 267 11.9.3 用讀寫鎖(互斥量)做“多 讀少寫”型并發(fā)任務(wù) 268 第12章 Go語言進(jìn)行數(shù)據(jù)庫開發(fā) 270 12.1 Go語言進(jìn)行數(shù)據(jù)庫開發(fā)的一般 方式 270 12.2 安裝SQLite數(shù)據(jù)庫驅(qū)動(dòng) 270 12.3 基本的數(shù)據(jù)庫操作——新建庫表、 插入記錄和查詢 270 12.4 刪除記錄、準(zhǔn)備SQL查詢等操作 273 12.5 獲取記錄條數(shù)、刪除庫表等操作 275 12.6 SQL型數(shù)據(jù)庫開發(fā)總結(jié) 276 12.7 NoSQL型數(shù)據(jù)庫開發(fā)示例 276 第13章 Go語言進(jìn)行網(wǎng)絡(luò)服務(wù)的 開發(fā) 280 13.1 C/S架構(gòu)與B/S架構(gòu)的概念 280 13.2 基于Socket通信的客戶端/服務(wù)器 模式 280 13.3 基于TCP的Socket客戶端/服務(wù)器 系統(tǒng) 281 13.4 典型的Socket服務(wù)器的例子 281 13.5 典型的Socket客戶端的例子 283 13.6 典型的UDP服務(wù)器的例子 286 13.7 典型的UDP客戶端的例子 287 13.8 用Go語言搭建簡(jiǎn)單的Web服務(wù)器 288 13.9 搭建簡(jiǎn)單的文件服務(wù)器 290 13.10 搭建靜態(tài)文件型的Web網(wǎng)站 服務(wù)器 290 13.11 混合不同方式的Web服務(wù)器 293 13.12 搭建提供網(wǎng)絡(luò)接口服務(wù)的API 服務(wù)器 294 13.13 Web服務(wù)器的路由管理 297 13.14 動(dòng)態(tài)網(wǎng)頁的生成 299 13.15 提供HTTPS方式訪問 302 13.16 第三方的Web開發(fā)包 303 13.17 Go語言中實(shí)現(xiàn)Web客戶端 305 第14章 Go語言進(jìn)行繪圖和圖像 處理 307 14.1 基本的點(diǎn)繪圖 307 14.2 繪制曲線圖 308 14.3 繪制有填充色的形狀 311 14.4 實(shí)現(xiàn)漸變的填充色 314 14.5 使用第三方庫更方便實(shí)現(xiàn)復(fù)雜 圖形繪制 318 14.6 繪制平滑曲線 321 14.7 在圖片上繪制文字 323 14.8 使用freetype包進(jìn)行文字繪制 326 14.9 用image/draw包實(shí)現(xiàn)靈活的圖像 處理 328 14.9.1 實(shí)現(xiàn)圖片區(qū)域復(fù)制 328 14.9.2 用draw.Draw函數(shù)進(jìn)行顏色 填充 333 14.9.3 image包中的幾個(gè)重要對(duì)象 333 14.9.4 用顏色填充繪制矩形框 334 14.9.5 將圖片變成全透明 334 14.9.6 復(fù)制原圖中的區(qū)域到目標(biāo)圖中 另一個(gè)區(qū)域 335 14.9.7 使用蒙版復(fù)制不規(guī)則區(qū)域 335 14.9.8 自定義image.Image類型的蒙版 對(duì)象 337 14.9.9 圖片色彩空間的轉(zhuǎn)換 338 14.10 在Web中輸出圖像 339 第15章 Go語言進(jìn)行圖形界面 開發(fā) 343 15.1 使用Qt開發(fā)圖形界面 343 15.1.1 Go結(jié)合Qt開發(fā)環(huán)境的搭建 343 15.1.2 Go結(jié)合Qt開發(fā)基礎(chǔ)示例 344 15.1.3 部署therecipe/qt示例程序 346 15.1.4 在goroutine中安全操作圖形 界面 347 15.2 使用govcl包開發(fā)圖形界面 355 15.2.1 使用govcl包開發(fā)圖形界面的 基礎(chǔ)示例 355 15.2.2 govcl包中避免并發(fā)界面操作 沖突 358 15.3 Go語言中開發(fā)基于Web的圖形 界面 360 第16章 Go語言的反射機(jī)制 361 16.1 用反射機(jī)制獲取基本類型的信息 361 16.2 用反射獲取復(fù)雜類型的信息 362 16.3 函數(shù)的傳值與傳引用 363 16.4 用反射獲取結(jié)構(gòu)類型(對(duì)象)的 成員信息 364 16.5 用反射獲取空接口類型數(shù)據(jù)的 實(shí)際類型 366 16.6 用Kind函數(shù)獲取基類型 367 16.7 判斷對(duì)象是否實(shí)現(xiàn)了某方法或接口 370 16.8 動(dòng)態(tài)調(diào)用對(duì)象的方法 372 16.9 修改數(shù)據(jù) 374 16.10 實(shí)例:JSON處理 375 第17章 Go語言的測(cè)試與性能 378 17.1 功能測(cè)試 378 17.1.1 基本的功能測(cè)試 378 17.1.2 功能測(cè)試不通過的情況 379 17.1.3 立即中止測(cè)試用例函數(shù) 380 17.1.4 簡(jiǎn)化的中止測(cè)試用例函數(shù) 381 17.1.5 跳過測(cè)試用例 381 17.1.6 進(jìn)行并發(fā)測(cè)試 382 17.1.7 指定運(yùn)行的測(cè)試用例 383 17.2 性能測(cè)試 384 17.2.1 基本的性能測(cè)試 384 17.2.2 根據(jù)性能測(cè)試結(jié)果進(jìn)行優(yōu)化和 比對(duì) 386 17.2.3 指定性能測(cè)試的時(shí)長 387 17.2.4 手動(dòng)控制測(cè)試計(jì)時(shí) 388 17.2.5 測(cè)試內(nèi)存分配的情況 388 第18章 Go語言與其他語言的 結(jié)合運(yùn)用 390 18.1 Cgo 390 18.1.1 Go語言中直接編寫C語言 代碼 390 18.1.2 Go語言中調(diào)用C語言 文件中的代碼 393 18.1.3 Go語言中編寫函數(shù)供 C語言調(diào)用 394 18.1.4 Cgo的一些局限 396 18.2 Go語言中運(yùn)行其他腳本語言 396 18.2.1 Tengo腳本語言 396 18.2.2 實(shí)現(xiàn)JavaScript虛擬機(jī)的 otto包 398 18.2.3 實(shí)現(xiàn)Lua語言虛擬機(jī)的 go-lua包 399 18.3 Go語言中直接執(zhí)行其他程序或調(diào)用 系統(tǒng)命令 400 18.3.1 調(diào)用應(yīng)用程序并讀取其輸出 400 18.3.2 使用管道從程序的輸出中接收 信息 402 18.4 Go語言與WebAssembly 404
你還可能感興趣
我要評(píng)論
|