注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)Go語(yǔ)言高級(jí)編程

Go語(yǔ)言高級(jí)編程

Go語(yǔ)言高級(jí)編程

定 價(jià):¥89.00

作 者: 柴樹(shù)杉,曹春暉 著
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書(shū)可以去


ISBN: 9787115510365 出版時(shí)間: 2019-07-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 365 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  本書(shū)從實(shí)踐出發(fā)講解Go語(yǔ)言的進(jìn)階知識(shí)。本書(shū)共6章,第1章簡(jiǎn)單回顧Go語(yǔ)言的發(fā)展歷史;第2章和第3章系統(tǒng)地介紹CGO編程和Go匯編語(yǔ)言的用法;第4章對(duì)RPC和Protobuf技術(shù)進(jìn)行深入介紹,并講述如何打造一個(gè)自己的RPC系統(tǒng);第5章介紹工業(yè)級(jí)環(huán)境的Web系統(tǒng)的設(shè)計(jì)和相關(guān)技術(shù);第6章介紹Go語(yǔ)言在分布式領(lǐng)域的一些編程技術(shù)。書(shū)中還涉及CGO和匯編方面的知識(shí),其中CGO能夠幫助讀者繼承的軟件遺產(chǎn),而在深入學(xué)習(xí)Go運(yùn)行時(shí),匯編對(duì)于理解各種語(yǔ)法設(shè)計(jì)的底層實(shí)現(xiàn)是必不可少的知識(shí)。此外,本書(shū)還包含一些緊跟潮流的內(nèi)容,介紹開(kāi)源界流行的gRPC及其相關(guān)應(yīng)用,講述Go Web框架中的基本實(shí)現(xiàn)原理和大型Web項(xiàng)目中的技術(shù)要點(diǎn),引導(dǎo)讀者對(duì)Go語(yǔ)言進(jìn)行更深入的應(yīng)用。本書(shū)適合對(duì)Go語(yǔ)言的應(yīng)用已經(jīng)有一些心得,并希望能夠深入理解底層實(shí)現(xiàn)原理或者是希望能夠在Web開(kāi)發(fā)方面結(jié)合Go語(yǔ)言來(lái)實(shí)現(xiàn)進(jìn)階學(xué)習(xí)的技術(shù)人員學(xué)習(xí)和參考。

作者簡(jiǎn)介

  柴樹(shù)杉,國(guó)內(nèi)較早的一批Go語(yǔ)言愛(ài)好者,Go語(yǔ)言代碼貢獻(xiàn)者。對(duì)WebAssembly技術(shù)有一定研究,除本書(shū)外還著有《WebAssembly標(biāo)準(zhǔn)入門》一書(shū)。GitHub賬號(hào)為chai2010。曹春暉,在Web 領(lǐng)域工作多年,開(kāi)源愛(ài)好者。對(duì)大型網(wǎng)站系統(tǒng)的架構(gòu)和相關(guān)工具的實(shí)現(xiàn)很感興趣,并且有一些研究成果。目前在滴滴平臺(tái)技術(shù)部工作。

圖書(shū)目錄

目 錄
第 1章 語(yǔ)言基礎(chǔ) 1
1.1 Go語(yǔ)言創(chuàng)世紀(jì) 1
1.1.1 來(lái)自貝爾實(shí)驗(yàn)室特有基因 3
1.1.2 你好,世界 4
1.2 “Hello, World”的革命 5
1.2.1 B語(yǔ)言——Ken Thompson, 1969 5
1.2.2 C語(yǔ)言——Dennis Ritchie,1972—1989 5
1.2.3 Newsqueak——Rob Pike, 1989 7
1.2.4 Alef——Phil Winterbottom, 1993 9
1.2.5 Limbo——Sean Dorward, Phil Winterbottom, Rob Pike, 1995 10
1.2.6 Go語(yǔ)言——2007—2009 11
1.2.7 你好,世界!——V2.0 13
1.3 數(shù)組、字符串和切片 13
1.3.1 數(shù)組 14
1.3.2 字符串 17
1.3.3 切片 21
1.4 函數(shù)、方法和接口 27
1.4.1 函數(shù) 27
1.4.2 方法 31
1.4.3 接口 35
1.5 面向并發(fā)的內(nèi)存模型 39
1.5.1 Goroutine和系統(tǒng)線程 40
1.5.2 原子操作 40
1.5.3 順序一致性內(nèi)存模型 44
1.5.4 初始化順序 45
1.5.5 Goroutine的創(chuàng)建 46
1.5.6 基于通道的通信 46
1.5.7 不靠譜的同步 48
1.6 常見(jiàn)的并發(fā)模式 49
1.6.1 并發(fā)版本的“Hello, World” 50
1.6.2 生產(chǎn)者/消費(fèi)者模型 52
1.6.3 發(fā)布/訂閱模型 53
1.6.4 控制并發(fā)數(shù) 56
1.6.5 贏者為王 57
1.6.6 素?cái)?shù)篩 58
1.6.7 并發(fā)的安全退出 59
1.6.8 context包 62
1.7 錯(cuò)誤和異常 64
1.7.1 錯(cuò)誤處理策略 65
1.7.2 獲取錯(cuò)誤的上下文 67
1.7.3 錯(cuò)誤的錯(cuò)誤返回 69
1.7.4 剖析異?!?0
1.8 補(bǔ)充說(shuō)明 73
第 2章 CGO編程 74
2.1 快速入門 74
2.1.1 最簡(jiǎn)CGO程序 74
2.1.2 基于C標(biāo)準(zhǔn)庫(kù)函數(shù)輸出字符串 75
2.1.3 使用自己的C函數(shù) 75
2.1.4 C代碼的模塊化 76
2.1.5 用Go重新實(shí)現(xiàn)C函數(shù) 77
2.1.6 面向C接口的Go編程 78
2.2 CGO基礎(chǔ) 79
2.2.1 import C語(yǔ)句 79
2.2.2 #cgo語(yǔ)句 81
2.2.3 build標(biāo)志條件編譯 82
2.3 類型轉(zhuǎn)換 83
2.3.1 數(shù)值類型 83
2.3.2 Go字符串和切片 85
2.3.3 結(jié)構(gòu)體、聯(lián)合和枚舉類型 86
2.3.4 數(shù)組、字符串和切片 89
2.3.5 指針間的轉(zhuǎn)換 91
2.3.6 數(shù)值和指針的轉(zhuǎn)換 92
2.3.7 切片間的轉(zhuǎn)換 93
2.4 函數(shù)調(diào)用 94
2.4.1 Go調(diào)用C函數(shù) 94
2.4.2 C函數(shù)的返回值 94
2.4.3 void函數(shù)的返回值 95
2.4.4 C調(diào)用Go導(dǎo)出函數(shù) 96
2.5 內(nèi)部機(jī)制 97
2.5.1 CGO生成的中間文件 97
2.5.2 Go調(diào)用C函數(shù) 98
2.5.3 C調(diào)用Go函數(shù) 101
2.6 實(shí)戰(zhàn):封裝qsort 103
2.6.1 認(rèn)識(shí)qsort()函數(shù) 103
2.6.2 將qsort()函數(shù)從Go包導(dǎo)出 104
2.6.3 改進(jìn):閉包函數(shù)作為比較函數(shù) 106
2.6.4 改進(jìn):消除用戶對(duì)unsafe包的依賴 108
2.7 CGO內(nèi)存模型 110
2.7.1 Go訪問(wèn)C內(nèi)存 110
2.7.2 C臨時(shí)訪問(wèn)傳入的Go內(nèi)存 111
2.7.3 C長(zhǎng)期持有Go指針對(duì)象 113
2.7.4 導(dǎo)出C函數(shù)不能返回Go內(nèi)存 115
2.8 C++類包裝 117
2.8.1 C++類到Go語(yǔ)言對(duì)象 117
2.8.2 Go語(yǔ)言對(duì)象到C++類 121
2.8.3 徹底解放C++的this指針 125
2.9 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù) 126
2.9.1 使用C靜態(tài)庫(kù) 126
2.9.2 使用C動(dòng)態(tài)庫(kù) 128
2.9.3 導(dǎo)出C靜態(tài)庫(kù) 129
2.9.4 導(dǎo)出C動(dòng)態(tài)庫(kù) 131
2.9.5 導(dǎo)出非main包的函數(shù) 131
2.10 編譯和鏈接參數(shù) 133
2.10.1 編譯參數(shù):CFLAGS/CPPFLAGS/CXXFLAGS 133
2.10.2 鏈接參數(shù):LDFLAGS 133
2.10.3 pkg-config 133
2.10.4 go get鏈 134
2.10.5 多個(gè)非main包中導(dǎo)出C函數(shù) 135
2.11 補(bǔ)充說(shuō)明 135
第3章 Go匯編語(yǔ)言 136
3.1 快速入門 136
3.1.1 實(shí)現(xiàn)和聲明 136
3.1.2 定義整數(shù)變量 137
3.1.3 定義字符串變量 138
3.1.4 定義main()函數(shù) 141
3.1.5 特殊字符 141
3.1.6 沒(méi)有分號(hào) 142
3.2 計(jì)算機(jī)結(jié)構(gòu) 142
3.2.1 圖靈機(jī)和BrainFuck語(yǔ)言 143
3.2.2 《人力資源機(jī)器》游戲 144
3.2.3 X86-64體系結(jié)構(gòu) 145
3.2.4 Go匯編中的偽寄存器 146
3.2.5 X86-64指令集 147
3.3 常量和全局變量 150
3.3.1 常量 150
3.3.2 全局變量 150
3.3.3 變量的內(nèi)存布局 156
3.3.4 標(biāo)識(shí)符規(guī)則和特殊標(biāo)志 157
3.3.5 小結(jié) 158
3.4 函數(shù) 158
3.4.1 基本語(yǔ)法 158
3.4.2 函數(shù)參數(shù)和返回值 160
3.4.3 參數(shù)和返回值的內(nèi)存布局 161
3.4.4 函數(shù)中的局部變量 163
3.4.5 調(diào)用其他函數(shù) 165
3.4.6 宏函數(shù) 166
3.5 控制流 167
3.5.1 順序執(zhí)行 167
3.5.2 if/goto跳轉(zhuǎn) 169
3.5.3 for循環(huán) 171
3.6 再論函數(shù) 172
3.6.1 函數(shù)調(diào)用規(guī)范 172
3.6.2 高級(jí)匯編語(yǔ)言 173
3.6.3 PCDATA和FUNCDATA 176
3.6.4 方法函數(shù) 177
3.6.5 遞歸函數(shù): 1到n求和 178
3.6.6 閉包函數(shù) 180
3.7 匯編語(yǔ)言的威力 182
3.7.1 系統(tǒng)調(diào)用 182
3.7.2 直接調(diào)用C函數(shù) 184
3.7.3 AVX指令 185
3.8 例子:Goroutine ID 187
3.8.1 故意設(shè)計(jì)沒(méi)有g(shù)oid 187
3.8.2 純Go方式獲取goid 187
3.8.3 從g結(jié)構(gòu)體獲取goid 189
3.8.4 獲取g結(jié)構(gòu)體對(duì)應(yīng)的接口對(duì)象 190
3.8.5 goid的應(yīng)用:局部存儲(chǔ) 192
3.9 Delve調(diào)試器 194
3.9.1 Delve入門 194
3.9.2 調(diào)試匯編程序 198
3.10 補(bǔ)充說(shuō)明 201
第4章 RPC和Protobuf 203
4.1 RPC入門 203
4.1.1 RPC版“Hello, World” 203
4.1.2 更安全的RPC接口 205
4.1.3 跨語(yǔ)言的RPC 207
4.1.4 HTTP上的RPC 209
4.2 Protobuf 210
4.2.1 Protobuf入門 210
4.2.2 定制代碼生成插件 212
4.2.3 自動(dòng)生成完整的RPC代碼 215
4.3 玩轉(zhuǎn)RPC 218
4.3.1 客戶端RPC的實(shí)現(xiàn)原理 218
4.3.2 基于RPC實(shí)現(xiàn)監(jiān)視功能 220
4.3.3 反向RPC 222
4.3.4 上下文信息 223
4.4 gRPC入門 224
4.4.1 gRPC技術(shù)?!?25
4.4.2 gRPC入門 225
4.4.3 gRPC流 227
4.4.4 發(fā)布和訂閱模式 229
4.5 gRPC進(jìn)階 233
4.5.1 證書(shū)認(rèn)證 233
4.5.2 Token認(rèn)證 236
4.5.3 截取器 238
4.5.4 和Web服務(wù)共存 240
4.6 gRPC和Protobuf擴(kuò)展 241
4.6.1 驗(yàn)證器 241
4.6.2 REST接口 244
4.6.3 Nginx 246
4.7 pbgo:基于Protobuf的框架 246
4.7.1 Protobuf擴(kuò)展語(yǔ)法 246
4.7.2 插件中讀取擴(kuò)展信息 248
4.7.3 生成REST代碼 249
4.7.4 啟動(dòng)REST服務(wù) 250
4.8 grpcurl工具 251
4.8.1 啟動(dòng)反射服務(wù) 251
4.8.2 查看服務(wù)列表 252
4.8.3 服務(wù)的方法列表 253
4.8.4 獲取類型信息 253
4.8.5 調(diào)用方法 254
4.9 補(bǔ)充說(shuō)明 255
第5章 Go和Web 256
5.1 Web開(kāi)發(fā)簡(jiǎn)介 256
5.2 請(qǐng)求路由 260
5.2.1 httprouter 260
5.2.2 原理 262
5.2.3 壓縮檢索樹(shù)創(chuàng)建過(guò)程 263
5.3 中間件 267
5.3.1 代碼泥潭 267
5.3.2 使用中間件剝離非業(yè)務(wù)邏輯 269
5.3.3 更優(yōu)雅的中間件寫(xiě)法 272
5.3.4 哪些事情適合在中間件中做 273
5.4 請(qǐng)求校驗(yàn) 274
5.4.1 重構(gòu)請(qǐng)求校驗(yàn)函數(shù) 275
5.4.2 用請(qǐng)求校驗(yàn)器解放體力勞動(dòng) 276
5.4.3 原理 277
5.5 Database 和數(shù)據(jù)庫(kù)打交道 279
5.5.1 從database/sql講起 279
5.5.2 提高生產(chǎn)效率的ORM和
SQL Builder 281
5.5.3 脆弱的數(shù)據(jù)庫(kù) 283
5.6 服務(wù)流量限制 285
5.6.1 常見(jiàn)的流量限制手段 287
5.6.2 原理 289
5.6.3 服務(wù)瓶頸和 QoS 291
5.7 常見(jiàn)大型Web項(xiàng)目分層 291
5.8 接口和表驅(qū)動(dòng)開(kāi)發(fā) 297
5.8.1 業(yè)務(wù)系統(tǒng)的發(fā)展過(guò)程 297
5.8.2 使用函數(shù)封裝業(yè)務(wù)流程 298
5.8.3 使用接口來(lái)做抽象 298
5.8.4 接口的優(yōu)缺點(diǎn) 301
5.8.5 表驅(qū)動(dòng)開(kāi)發(fā) 303
5.9 灰度發(fā)布和A/B測(cè)試 303
5.9.1 通過(guò)分批次部署實(shí)現(xiàn)灰度發(fā)布 304
5.9.2 通過(guò)業(yè)務(wù)規(guī)則進(jìn)行灰度發(fā)布 305
5.9.3 如何實(shí)現(xiàn)一套灰度發(fā)布系統(tǒng) 306
5.10 補(bǔ)充說(shuō)明 310
第6章 分布式系統(tǒng) 311
6.1 分布式ID生成器 311
6.1.1 worker_id分配 312
6.1.2 開(kāi)源實(shí)例 313
6.2 分布式鎖 316
6.2.1 進(jìn)程內(nèi)加鎖 317
6.2.2 嘗試鎖 317
6.2.3 基于Redis的setnx 319
6.2.4 基于ZooKeeper 321
6.2.5 基于etcd 321
6.2.6 如何選擇合適的鎖 322
6.3 延時(shí)任務(wù)系統(tǒng) 323
6.3.1 定時(shí)器的實(shí)現(xiàn) 323
6.3.2 任務(wù)分發(fā) 325
6.3.3 數(shù)據(jù)再平衡和冪等考量 326
6.4 分布式搜索引擎 327
6.4.1 搜索引擎 328
6.4.2 異構(gòu)數(shù)據(jù)同步 336
6.5 負(fù)載均衡 337
6.5.1 常見(jiàn)的負(fù)載均衡思路 337
6.5.2 基于洗牌算法的負(fù)載均衡 338
6.5.3 ZooKeeper集群的隨機(jī)節(jié)點(diǎn)挑選問(wèn)題 340
6.5.4 負(fù)載均衡算法效果驗(yàn)證 340
6.6 分布式配置管理 341
6.6.1 場(chǎng)景舉例 341
6.6.2 使用etcd實(shí)現(xiàn)配置更新 342
6.6.3 配置膨脹 345
6.6.4 配置版本管理 345
6.6.5 客戶端容錯(cuò) 345
6.7 分布式爬蟲(chóng) 346
6.7.1 基于colly的單機(jī)爬蟲(chóng) 346
6.7.2 分布式爬蟲(chóng) 347
6.7.3 結(jié)合nats和colly的消息生產(chǎn) 350
6.7.4 結(jié)合colly的消息消費(fèi) 352
6.8 補(bǔ)充說(shuō)明 353
附錄A 使用Go語(yǔ)言常遇到的問(wèn)題 354
附錄B 有趣的代碼片段 363

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)