Go語言從入門到進階實戰(視頻教學版)

Go語言從入門到進階實戰(視頻教學版) pdf epub mobi txt 电子书 下载 2025

徐波 著
想要找书就要到 求知書站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 机械工业出版社
ISBN:9787111598244
版次:1
商品编码:12380444
品牌:机工出版
包装:平装
开本:16开
出版时间:2018-06-01
用纸:胶版纸
页数:398

具体描述

內容簡介

本書采用“理論+實例”的形式編寫,作者通過大量實例,並結閤多年的一綫開發實戰經驗,全麵介紹瞭Go語言的語法及應用開發。作者特意為本書精心錄製瞭同步配套教學視頻,這將極大地提升讀者的學習效率。本書分為13章,主要介紹瞭Go語言的特性與環境搭建、基本語法與使用、容器(存儲和組織數據的方式)、流程控製、函數、結構體、接口(interface)、包(package)、並發、反射、編譯與工具和開發技巧等內容,後的實戰演練部分剖析瞭作者的開源網絡庫cellnet的架構及設計思想,並且實現瞭Socket聊天功能。本書對於Go語言的特色功能——並發,有全麵、深入的講解,需要讀者重點學習。本書特彆適閤Go語言初學者入門和進階閱讀,另外也適閤社會培訓學校作為教材使用,還適閤大中專院校的相關專業作為教學參考書。

目錄

目錄
配套學習資源
前言
第1章 初識Go語言1
1.1 Go語言特性1
1.2 使用Go語言的項目9
1.3 怎樣安裝Go語言開發包10
1.3.1 Windows版安裝11
1.3.2 Linux版安裝13
1.4 搭建開發環境14
1.4.1 集成開發環境——Jetbrains GoLand14
1.4.2 方便定義功能的編輯器——Visual Studio Code15
第2章 Go語言基本語法與使用19
2.1 變量19
2.1.1 聲明變量19
2.1.2 初始化變量20
2.1.3 多個變量同時賦值23
2.1.4 匿名變量——沒有名字的變量24
2.2 數據類型24
2.2.1 整型25
2.2.2 浮點型25
2.2.3 示例:輸齣正弦函數(Sin)圖像26
2.2.4 布爾型28
2.2.5 字符串29
2.2.6 字符31
2.2.7 切片——能動態分配的空間32
2.3 轉換不同的數據類型33
2.4 指針34
2.4.1 認識指針地址和指針類型35
2.4.2 從指針獲取指針指嚮的值36
2.4.3 使用指針修改值37
2.4.4 示例:使用指針變量獲取命令行的輸入信息39
2.4.5 創建指針的另一種方法——new()函數40
2.5 變量生命期——變量能夠使用的代碼範圍40
2.5.1 什麼是棧41
2.5.2 什麼是堆42
2.5.3 變量逃逸(Escape Analysis)——自動決定變量分配方式,提高運行效率43
2.6 字符串應用46
2.6.1 計算字符串長度46
2.6.2 遍曆字符串——獲取每一個字符串元素47
2.6.3 獲取字符串的某一段字符48
2.6.4 修改字符串49
2.6.5 連接字符串49
2.6.6 格式化50
2.6.7 示例:Base64編碼——電子郵件的基礎編碼格式51
2.6.8 示例:從INI配置文件中查詢需要的值52
2.7 常量——恒定不變的值57
2.7.1 枚舉——一組常量值58
2.7.2 將枚舉值轉換為字符串59
2.8 類型彆名(Type Alias)60
2.8.1 區分類型彆名與類型定義61
2.8.2 非本地類型不能定義方法62
2.8.3 在結構體成員嵌入時使用彆名63
第3章 容器:存儲和組織數據的方式65
3.1 數組——固定大小的連續空間65
3.1.1 聲明數組66
3.1.2 初始化數組66
3.1.3 遍曆數組——訪問每一個數組元素67
3.2 切片(slice)——動態分配大小的連續空間67
3.2.1 從數組或切片生成新的切片68
3.2.2 聲明切片70
3.2.3 使用make()函數構造切片71
3.2.4 使用append()函數為切片添加元素71
3.2.5 復製切片元素到另一個切片73
3.2.6 從切片中刪除元素74
3.3 映射(map)——建立事物關聯的容器76
3.3.1 添加關聯到map並訪問關聯和數據76
3.3.2 遍曆map的“鍵值對”——?訪問每一個map中的關聯關係77
3.3.3 使用delete()函數從map中刪除鍵值對79
3.3.4 清空map中的所有元素79
3.3.5 能夠在並發環境中使用的map——?sync.Map79
3.4 列錶(list)——可以快速增刪的非連續空間的容器81
3.4.1 初始化列錶83
3.4.2 在列錶中插入元素83
3.4.3 從列錶中刪除元素84
3.4.4 遍曆列錶——訪問列錶的每一個元素85
第4章 流程控製87
4.1 條件判斷(if)87
4.2 構建循環(for)88
4.2.1 for中的初始語句——開始循環時執行的語句89
4.2.2 for中的條件錶達式——控製是否循環的開關89
4.2.3 for中的結束語句——每次循環結束時執行的語句90
4.3 示例:九九乘法錶90
4.4 鍵值循環(for range)——直接獲得對象的索引和數據91
4.4.1 遍曆數組、切片——獲得索引和元素92
4.4.2 遍曆字符串——獲得字符92
4.4.3 遍曆map——獲得map的鍵和值92
4.4.4 遍曆通道(channel)——接收通道數據93
4.4.5 在遍曆中選擇希望獲得的變量93
4.5 分支選擇(switch)——擁有多個條件分支的判斷94
4.5.1 基本寫法95
4.5.2 跨越case的fallthrough——兼容C語言的case設計96
4.6 跳轉到指定代碼標簽(goto)96
4.6.1 使用goto退齣多層循環96
4.6.2 使用goto集中處理錯誤97
4.6.3 統一錯誤處理98
4.7 跳齣指定循環(break)——可以跳齣多層循環99
4.8 繼續下一次循環(continue)100
第5章 函數(function)101
5.1 聲明函數101
5.1.1 普通函數的聲明形式101
5.1.2 參數類型的簡寫102
5.1.3 函數的返迴值102
5.1.4 調用函數104
5.1.5 示例:將“秒”解析為時間單位104
5.1.6 示例:函數中的參數傳遞效果測試105
5.2 函數變量——把函數作為值保存到變量中108
5.3 示例:字符串的鏈式處理——操作與數據分離的設計技巧109
5.4 匿名函數——沒有函數名字的函數112
5.4.1 定義一個匿名函數112
5.4.2 匿名函數用作迴調函數113
5.4.3 使用匿名函數實現操作封裝113
5.5 函數類型實現接口——把函數作為接口來調用115
5.5.1 結構體實現接口115
5.5.2 函數體實現接口116
5.5.3 HTTP包中的例子117
5.6 閉包(Closure)——引用瞭外部變量的匿名函數118
5.6.1 在閉包內部修改引用的變量119
5.6.2 示例:閉包的記憶效應119
5.6.3 示例:閉包實現生成器121
5.7 可變參數——參數數量不固定的函數形式122
5.7.1 fmt包中的例子122
5.7.2 遍曆可變參數列錶——獲取每一個參數的值123
5.7.3 獲得可變參數類型——獲得每一個參數的類型124
5.7.4 在多個可變參數函數中傳遞參數125
5.8 延遲執行語句(defer)127
5.8.1 多個延遲執行語句的處理順序127
5.8.2 使用延遲執行語句在函數退齣時釋放資源127
5.9 處理運行時發生的錯誤131
5.9.1 net包中的例子131
5.9.2 錯誤接口的定義格式132
5.9.3 自定義一個錯誤132
5.9.4 示例:在解析中使用自定義錯誤133
5.10 宕機(panic)——程序終止運行135
5.10.1 手動觸發宕機135
5.10.2 在運行依賴的必備資源缺失時主動觸發宕機136
5.10.3 在宕機時觸發延遲執行語句136
5.11 宕機恢復(recover)——防止程序崩潰137
5.11.1 讓程序在崩潰時繼續執行137
5.11.2 panic和recover的關係139
第6章 結構體(struct)141
6.1 定義結構體141
6.2 實例化結構體——為結構體分配內存並初始化142
6.2.1 基本的實例化形式142
6.2.2 創建指針類型的結構體143
6.2.3 取結構體的地址實例化143
6.3 初始化結構體的成員變量144
6.3.1 使用“鍵值對”初始化結構體145
6.3.2 使用多個值的列錶初始化結構體146
6.3.3 初始化匿名結構體147
6.4 構造函數——結構體和類型的一係列初始化操作的函數封裝148
6.4.1 多種方式創建和初始化結構體——模擬構造函數重載149
6.4.2 帶有父子關係的結構體的構造和初始化——模擬父級構造調用149
6.5 方法150
6.5.1 為結構體添加方法151
6.5.2 接收器——方法作用的目標152
6.5.3 示例:二維矢量模擬玩傢移動155
6.5.4 為類型添加方法160
6.5.5 示例:使用事件係統實現事件的響應和處理165
6.6 類型內嵌和結構體內嵌170
6.6.1 聲明結構體內嵌170
6.6.2 結構內嵌特性172
6.6.3 使用組閤思想描述對象特性173
6.6.4 初始化結構體內嵌174
6.6.5 初始化內嵌匿名結構體175
6.6.6 成員名字衝突177
6.7 示例:使用匿名結構體分離JSON數據178
第7章 接口(interface)181
7.1 聲明接口181
7.1.1 接口聲明的格式181
7.1.2 開發中常見的接口及寫法182
7.2 實現接口的條件182
7.2.1 接口被實現的條件一:接口的方法與實現接口的類型方法格式一緻182
7.2.2 條件二:接口中所有方法均被實現185
7.3 理解類型與接口的關係186
7.3.1 一個類型可以實現多個接口186
7.3.2 多個類型可以實現相同的接口187
7.4 示例:便於擴展輸齣方式的日誌係統189
7.5 示例:使用接口進行數據的排序195
7.5.1 使用sort.Interface接口進行排序195
7.5.2 常見類型的便捷排序197
7.5.3 對結構體數據進行排序199
7.6 接口的嵌套組閤——將多個接口放在一個接口內202
7.7 在接口和類型間轉換205
7.7.1 類型斷言的格式205
7.7.2 將接口轉換為其他接口205
7.7.3 將接口轉換為其他類型208
7.8 空接口類型(interface{})——能保存所有值的類型208
7.8.1 將值保存到空接口209
7.8.2 從空接口獲取值209
7.8.3 空接口的值比較210
7.9 示例:使用空接口實現可以保存任意值的字典211
7.10 類型分支——批量判斷空接口中變量的類型214
7.10.1 類型斷言的書寫格式214
7.10.2 使用類型分支判斷基本類型215
7.10.3 使用類型分支判斷接口類型215
7.11 示例:實現有限狀態機(FSM)217
第8章 包(package)227
8.1 工作目錄(GOPATH)227
8.1.1 使用命令行查看GOPATH信息227
8.1.2 使用GOPATH的工程結構228
8.1.3 設置和使用GOPATH229
8.1.4 在多項目工程中使用GOPATH230
8.2 創建包package——編寫自己的代碼擴展231
8.3 導齣標識符——讓外部訪問包的類型和值231
8.3.1 導齣包內標識符231
8.3.2 導齣結構體及接口成員232
8.4 導入包(import)——在代碼中使用其他的代碼232
8.4.1 默認導入的寫法233
8.4.2 導入包後自定義引用的包名234
8.4.3 匿名導入包——隻導入包但不使用包內類型和數值235
8.4.4 包在程序啓動前的初始化入口:init235
8.4.5 理解包導入後的init()函數初始化順序235
8.5 示例:工廠模式自動注冊——管理多個包的結構體237
第9章 並發241
9.1 輕量級綫程(goroutine)——根據需要隨時創建的“綫程”241
9.1.1 使用普通函數創建goroutine241
9.1.2 使用匿名函數創建goroutine244
9.1.3 調整並發的運行性能(GOMAXPROCS)245
9.1.4 理解並發和並行245
9.1.5 Go語言的協作程序(goroutine)和普通的協作程序(coroutine)246
9.2 通道(channel)——在多個goroutine間通信的管道246
9.2.1 通道的特性247
9.2.2 聲明通道類型247
9.2.3 創建通道248
9.2.4 使用通道發送數據248
9.2.5 使用通道接收數據249
9.2.6 示例:並發打印252
9.2.7 單嚮通道——通道中的單行道254
9.2.8 帶緩衝的通道255
9.2.9 通道的多路復用——同時處理接收和發送多個通道的數據257
9.2.10 示例:模擬遠程過程調用(RPC)258
9.2.11 示例:使用通道響應計時器的事件261
9.2.12 關閉通道後繼續使用通道264
9.3 示例:Telnet迴音服務器——TCP服務器的基本結構266
9.4 同步——保證並發環境下數據訪問的正確性273
9.4.1 競態檢測——檢測代碼在並發環境下可能齣現的問題273
9.4.2 互斥鎖(sync.Mutex)——保證同時隻有一個goroutine可以訪問共享資源275
9.4.3 讀寫互斥鎖(sync.RWMutex)——在讀比寫多的環境下比互斥鎖更高效277
9.4.4 等待組(sync.WaitGroup)——保證在並發環境中完成指定數量的任務277
第10章 反射280
10.1 反射的類型對象(reflect.Type)280
10.1.1 理解反射的類型(Type)與種類(Kind)281
10.1.2 指針與指針指嚮的元素283
10.1.3 使用反射獲取結構體的成員類型284
10.1.4 結構體標簽(Struct Tag)——對結構體字段的額外信息標簽287
10.2 反射的值對象(reflect.Value)288
10.2.1 使用反射值對象包裝任意值288
10.2.2 從反射值對象獲取被包裝的值289
10.2.3 使用反射訪問結構體的成員字段的值290
10.2.4 反射對象的空和有效性判斷292
10.2.5 使用反射值對象修改變量的值293
10.2.6 通過類型創建類型的實例297
10.2.7 使用反射調用函數298
10.3 示例:將結構體的數據保存為JSON格式的文本數據299
第11章 編譯與工具306
11.1 編譯(go build)306
11.1.1 go build 無參數編譯306
11.1.2 go build+文件列錶307
11.1.3 go build +包308
11.1. 4 go build編譯時的附加參數310
11.2 編譯後運行(go run)310
11.3 編譯並安裝(go install)311
11.4 一鍵獲取代碼、編譯並安裝(go get)312
11.4.1 遠程包的路徑格式312
11.4.2 go get + 遠程包312
11.4.3 go get使用時的附加參數313
11.5 測試(go test)313
11.5.1 單元測試——測試和驗證代碼的框架313
11.5.2 基準測試——獲得代碼內存占用和運行效率的性能數據316
11.6 性能分析(go pprof)——發現代碼性能問題的調用位置319
11.6.1 安裝第三方圖形化顯式分析數據工具(Graphviz)319
11.6.2 安裝第三方性能分析來分析代碼包319
11.6.3 性能分析代碼319
第12章 “避坑”與技巧323
12.1 閤理地使用並發特性323
12.1.1 瞭解goroutine的生命期時再創建goroutine323
12.1.2 避免在不必要的地方使用通道326
12.2 反射:性能和靈活性的雙刃劍330
12.3 接口的nil判斷335
12.4 map的多鍵索引——多個數值條件可以同時查詢336
12.4.1 基於哈希值的多鍵索引及查詢337
12.4.2 利用map特性的多鍵索引及查詢341
12.4.3 總結342
12.5 優雅地處理TCP粘包342
第13章 實戰演練——剖析cellnet網絡庫設計並實現Socket聊天功能354
13.1 瞭解cellet網絡庫特性、流程及架構354
13.1.1 cellnet網絡庫的特性354
13.1.2 cellnet網絡庫的流程及架構356
13.2 管理TCP Socket連接356
13.2.1 理解Socket的事件類型357
13.2.2 管理事件迴調359
13.2.3 連接器(Connector)361
13.2.4 會話管理(SessionManager)363
13.2.5 接受器(Acceptor)366
13.3 組織接收和發送數據流程的Socket會話(Session)367
13.3.1 在會話開始時啓動goroutine和派發事件368
13.3.2 會話中的接收數據循環369
13.3.3 會話中的發送數據循環370
13.4 排隊處理事件的事件隊列(EventQueue)372
13.4.1 實現事件隊列372
13.4.2 使用不同的事件隊列模式處理數據374
13.5 消息編碼(codec)——讓cellnet支持消息的多種編碼格式377
13.6 消息元信息(MessageMeta)——消息ID、消息名稱和消息類型的關聯關係379
13.6.1 理解消息元信息380
13.6.2 注冊消息元信息380
13.6.3 示例:使用消息元信息381
13.6.4 實現消息的編碼(EncodeMessage())和解碼(DecodeMessage())函數382
13.7 接收和發送封包(packet)383
13.7.1 接收可變長度封包384
13.7.2 瞭解封包數據讀取器(PacketReader)385
13.7.3 瞭解封包數據寫入器(PacketWriter)387
13.7.4 讀取自定義封包及數據387
13.7.5 寫入自定義封包及數據389
13.7.6 響應消息處理事件390
13.8 使用cellnet網絡庫實現聊天功能392
13.8.1 定義聊天協議393
13.8.2 實現客戶端功能394
13.8.3 實現服務器功能396
13.8.4 運行聊天服務器和客戶端398

前言/序言

前言  現今,多核CPU已經成為服務器的標配。但是對多核的運算能力挖掘一直由程序員人工設計算法及框架來完成。這個過程需要開發人員具有一定的並發設計及框架設計能力。雖然一些編程語言的框架在不斷地提高多核資源使用效率,如Java的Netty等,但仍然需要開發人員花費大量的時間和精力搞懂這些框架的運行原理後纔能熟練掌握。
  Go語言在多核並發上擁有原生的設計優勢。Go語言從2009年11月開源,2012年發布Go 1.0穩定版本以來,已經擁有活躍的社區和全球眾多開發者,並且與蘋果公司的Swift一樣,成為當前非常流行的開發語言之一。很多公司,特彆是中國的互聯網公司,即將或者已經完成瞭使用Go語言改造舊係統的過程。經過Go語言重構的係統能使用更少的硬件資源而有更高的並發和I/O吞吐錶現。
  Go語言簡單易學,學習麯綫平緩,不需要像C/C++語言動輒需要兩到三年的學習期。Go語言被稱為“互聯網時代的C語言”。互聯網的短、頻、快特性在Go語言中體現得淋灕盡緻。一個熟練的開發者隻需要短短的一周時間就可以從學習階段轉到開發階段,並完成一個高並發的服務器開發。
  麵對Go語言的普及和學習熱潮,本書使用淺顯易懂的語言,介紹瞭GO語言從基礎的語法知識到並發和接口等新特性知識,從而帶領讀者迅速熟悉這門新時代的編程語言。
本書特色  1. 提供同步配套的教學視頻  為瞭讓讀者更好地學習本書,作者為書中的重點內容錄製瞭配套教學視頻,藉助這些視頻,讀者可以更輕鬆地學習。
  作者曾經為慕課網的專業視頻製作提供指導,並在慕課網做過多期Go語言、Unity 3D遊戲引擎和Cocos遊戲引擎等網絡教學培訓,受到眾多開發者的青睞及好評。希望讀者能夠通過作者錄製的視頻輕鬆地學習Go語言。
  2. 來自一綫的開發經驗及實戰例子  本書中的大多數例子及代碼都來自於作者多年的口述教學和技術分享會等實踐,受到瞭眾多開發者的一緻好評。同時,作者本人也是一名開源愛好者,編寫瞭業內著名的cellnet網絡庫。本書將為讀者介紹cellnet的架構和設計思想,以幫助讀者剖析cellnet內部的運行機製,從而讓讀者能方便地使用cellnet快速實現業務邏輯。
  3. 淺顯易懂的語言、觸類旁通的講解、循序漸進的知識體係  本書在內容編排上盡量做到通俗易懂;在講解一些常見編程語言特性時,將Go語言和其他多種語言的特性進行對比,讓掌握多種編程語言的開發者能迅速理解Go語言的特性。無論是初學者,還是久經“沙場”的老程序員,都能通過本書快速學習Go語言的精華。
  4. 內容全麵,實用性強  本書詳細介紹瞭作者精心挑選的多個實用性很強的例子,如JSON串行化、有限狀態機(FSM)、TCP粘包處理、Echo服務器和事件係統等。讀者既可以從例子中學習並理解Go語言的知識點,還可以將這些例子應用於實際開發中。
本書內容  第1章 初識Go語言  本章主要介紹瞭以下內容:
  (1)Go語言的特性;  (2)使用Go語言的開源項目;  (3)安裝Go語言開發包和搭建其開發環境。
  第2章 Go語言基本語法與使用  本章主要介紹瞭Go語言的基本語法,如變量、各種常見數據類型及常量,此外還介紹瞭Go 1.9版本中新添加的特性,即類型彆名。
  第3章 容器:存儲和組織數據的方式  本章介紹瞭Go語言編程算法中常用的容器,如數組、切片、映射,以及列錶的創建、設置、獲取、查詢和遍曆等操作。
  第4章 流程控製  本章主要介紹瞭常見的條件判斷、循環和分支語句,包括以下內容:
  (1)條件判斷(if);  (2)條件循環(for);  (3)鍵值循環(for range);  (4)分支選擇(switch);  (5)跳轉語句(goto);  (6)跳齣循環(break)和繼續循環(continue)。
  第5章 函數(function)  本章首先介紹瞭Go語言中較為基礎的函數聲明格式及命名返迴值特性;然後介紹瞭Go語言中較為靈活的特性,即函數變量和匿名函數;還介紹瞭一個展示操作與數據分離的示例:字符串的鏈式處理,從而引齣函數閉包概念;之後介紹瞭Go語言中最具特色的如下幾個功能:
  (1)延遲執行語句(defer)——將語句延遲到函數退齣時執行;  (2)宕機(panic)——終止程序運行;  (3)宕機恢復(recover)——讓程序從宕機中恢復。
  第6章 結構體(struct)  本章介紹瞭Go語言中最重要的概念:結構體。首先講解瞭結構體多種靈活的實例化和成員初始化方法;接著使用麵嚮對象和麵嚮過程等思想,逐步介紹瞭Go語言中的方法及新的概念接收器;然後使用遊戲中經典的位置移動例子,展現瞭結構體的實際使用方法;最後,使用大量例子介紹瞭結構體內嵌和類型內嵌內容,並在JSON數據的分離實例中體驗Go語言的內嵌結構體的強大功能。
  本章中的經典例子:使用事件係統實現事件的響應和處理——展現Go語言的方法與函數的統一調用過程。
  第7章 接口(interface)  本章介紹瞭Go語言接口的如下幾個知識點:
  (1)聲明接口;  (2)實現接口的條件;  (3)接口的嵌套組閤;  (4)接口的轉換;  (5)接口類型斷言和類型分支——判斷接口的類型;  (6)空接口。
  本章中涉及的例子有:便於擴展輸齣方式的日誌係統;使用接口進行數據的排序;使用空接口實現可以保存任意值的字典及實現有限狀態機(FSM)等。
  第8章 包(package)  本章首先介紹瞭構建工程的基礎概念GOPATH,接著介紹瞭包(package)的創建和導入過程與方法,以及能控製訪問權限的導齣包內標識符的方法。
  本章給齣瞭一個典型的工廠模式自動注冊示例,介紹瞭多個包的定義和使用方法。
  第9章 並發  本章講解瞭Go語言中並發的兩個重要概念:輕量級綫程(goroutine)和通道(channel)。首先介紹瞭goroutine的創建方法及一些和並發相關的概念,便於讀者理解goroutine和綫程的區彆與聯係;然後介紹瞭通道的聲明、創建和使用方法,使用3個示例,即模擬遠程過程調用(RPC)、使用通道響應計時器事件和Telnet迴音服務器,來展示通道的實際使用方法;最後介紹瞭在並發環境下的同步處理方法,如使用互斥鎖和等待組等,以及使用競態檢測提前發現並發問題。
  第10章 反射  本章按照反射的類彆分為兩部分:反射類型對象(reflect.Type)和反射值對象(reflect.Value)。首先介紹瞭反射類型的獲取及遍曆方法,同時介紹瞭反射類型對象獲取結構體標簽的方法;接著介紹瞭反射值對象獲取及修改值和遍曆值等;最後通過使用反射將結構體串行化為JSON格式字符串的示例,介紹瞭反射在實際中的運用。
  第11章 編譯與工具  本章介紹瞭Go語言中常用的編譯及工具指令,例如:
  (1)go build/go install——編譯及安裝源碼;  (2)go get——遠程獲取並安裝源碼;  (3)go test——單元測試和基準測試框架;  (4)go pprof——性能分析工具。
  第12章 “避坑”與技巧  本章首先介紹瞭作者多年使用Go語言的開發經驗和技巧總結,以及一些使用Go語言中可能發生的錯誤及優化建議,例如閤理使用並發、在性能與靈活性中做齣取捨後再使用反射等;接著介紹瞭Go語言中一個不為人知的特性——map的多鍵索引,利用該特性可以方便地對數據進行多個條件的索引;最後介紹瞭使用Go語言的Socket處理TCP粘包問題。
  第13章 實戰演練——剖析cellnet網絡庫設計並實現Socket聊天功能  本章介紹瞭cellnet網絡庫的基本特性、流程、架構及如下幾個關鍵概念:
  (1)連接管理;  (2)會話收發數據流程;  (3)事件隊列;  (4)消息編碼;  (5)消息元信息;  (6)接收和發送封包。
  本章使用cellnet網絡庫實現瞭帶有聊天功能的客戶端和服務器。
本書讀者對象* Go語言初學者;* Go語言進階讀者;* 編程初學者;* 後端程序初學者;* 前端轉後端的開發人員;* 熟悉C/C++、Java和C#語言,想瞭解和學習Go語言的編程愛好者;* 想用Go語言快速學習編寫服務器端程序的開發者;* 相關培訓學員;* 各大院校的學生。
關於作者  本書由徐波編寫,郭聰和張銳參與審核和校對。感謝我的妻子和傢人在我寫書期間的大力支持。
  另外,在本書編寫期間,得到瞭吳宏偉先生的耐心指導,他一絲不苟、細緻入微地對書稿進行瞭審核和校對,這讓本書的條理更加清晰,語言更加通俗易懂。在此錶示深深的感謝!
  雖然我們對書中所述內容都盡量核實,並多次進行瞭文字校對,但因時間所限,加之水平所限,書中的疏漏和錯誤在所難免,敬請廣大讀者批評指正。聯係我們請發E-mail到hzbook2017@163.com。
    徐波

用户评价

评分

评分

评分

评分

评分

评分

评分

评分

评分

相关图书

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有