Head First Go語言程序設(shè)計(jì)
定 價(jià):149 元
叢書名:華章IT
- 作者:[美]杰伊·麥克格瑞恩(Jay McGavren)著
- 出版時(shí)間:2020/9/1
- ISBN:9787111664932
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8GO
- 頁碼:
- 紙張:膠版紙
- 版次:1
- 開本:16K
本書內(nèi)容包括“讓我們開始吧:語法基礎(chǔ)”“接下來運(yùn)行哪些代碼:條件和循環(huán)”“調(diào)用:函數(shù)”“代碼集:包”“列表:數(shù)組”“追加的問題:切片”“標(biāo)簽數(shù)據(jù):映射”“構(gòu)建存儲:struct”“我喜歡的類型:定義類型”等。
Go是為高性能網(wǎng)絡(luò)和多處理而設(shè)計(jì)的, 但與python和javascript一樣,該語言易于閱讀和使用。通過這本實(shí)用的實(shí)踐指南,讀者將學(xué)習(xí)如何使用演示實(shí)際語言的清晰示例來編寫Go代碼。*重要的是,讀者將會了解到用人單位希望入門級Go開發(fā)人員所知曉的慣例和技術(shù)。主要內(nèi)容包括語法基礎(chǔ)、條件和循環(huán)、函數(shù)、包、數(shù)組、映射、結(jié)構(gòu)、封裝和嵌入、接口、故障恢復(fù)、共享、自動化測試、Web應(yīng)用程序等。
目錄 (概要)
如何使用這本書:前言 xxvii
1 讓我們開始吧:語法基礎(chǔ) 1
2 接下來運(yùn)行哪些代碼:條件和循環(huán) 31
3 調(diào)用:函數(shù) 79
4 代碼集:包 113
5 列表:數(shù)組 149
6 追加的問題:切片 175
7 標(biāo)簽數(shù)據(jù):映射 205
8 構(gòu)建存儲:struct 231
9 我喜歡的類型:定義類型 265
10 保密:封裝和嵌入 289
11 你能做什么:接口 321
12 重新站起來:從失敗中恢復(fù) 349
13 分享工作:goroutine和 channel 379
14 代碼的質(zhì)量保證:自動化測試 401
15 響應(yīng)請求:Web應(yīng)用程序 425
16 要遵循的模式:HTML模板 445
A 理解os.OpenFile:打開文件 481
B 有六件事我們沒有涉及:剩下的內(nèi)容 495
目錄 (真正的目錄)
如何使用這本書
前言
你的大腦如何看待Go。在這里,你試圖學(xué)習(xí)一些東西,而你的大腦 在幫你的忙,確保學(xué)習(xí)不會停滯不前。你的大腦在想:“最好給更重要的 事情留點(diǎn)兒空間,比如避開哪些野生動物,裸體滑雪是否是個(gè)壞主意。” 那么,你如何欺騙你的大腦,讓它認(rèn)為你的生活依賴于如何用Go編程呢?
這本書是給誰看的 xxviii
我們知道你在想什么 xxix
我們知道你的大腦在想什么 xxix
元認(rèn)知:思考“何為思考” xxxi
我們是這樣做的 xxxii
說明 xxxiv
致謝 xxxv
1讓我們開始吧 語法基礎(chǔ)
準(zhǔn)備好給你的軟件充電了嗎?你想要一種編譯速度快的簡單編程語言嗎?它跑 得快嗎?它可以很容易地將你的工作分發(fā)給用戶嗎?那就準(zhǔn)備好學(xué)習(xí)Go吧!
Go是一種注重簡單性和速度的編程語言。它比其他語言都簡單,所以學(xué)起來更快。它 可以讓你利用當(dāng)今多核計(jì)算機(jī)處理器的能力,使你的程序運(yùn)行得更快。本章將向你展 示所有Go的功能,這些功能將使你作為開發(fā)人員的生活更輕松,并使你的用戶更快樂。
準(zhǔn)備好,出發(fā) 2
Go Playground 3
這一切意味著什么 4
如果出了問題怎么辦 5
調(diào)用函數(shù) 7
Println函數(shù) 7
使用其他包中的函數(shù) 8
函數(shù)返回值 9
Go程序模板 11
字符串 11
符文 12
布爾值 12
數(shù)字 13
數(shù)學(xué)運(yùn)算與比較 13
類型 14
聲明變量 16
零值 17
短變量聲明 19
命名規(guī)則 21
轉(zhuǎn)換 22
在你的計(jì)算機(jī)上安裝Go 25
編譯Go代碼 26
Go工具 27
使用“go run”快速嘗試代碼 27
你的Go 工具箱 28
package main import "fmt" func main() {
}
fmt.Println( )
"Hello, Go!"
Hello, Go!
1 2
true
3
4 <6
viii
'?'
1174 輸出
2 接下來運(yùn)行哪些代碼
條件和循環(huán)
每個(gè)程序都有僅在特定情況下適用的部分。“如果出現(xiàn)錯(cuò)誤,應(yīng)該運(yùn)行 這段代碼。否則,應(yīng)該運(yùn)行其他代碼!睅缀趺總(gè)程序都包含只有在特定條件為真時(shí)才 應(yīng)該運(yùn)行的代碼。因此,幾乎每種編程語言都提供條件語句,讓你決定是否運(yùn)行某段代 碼。Go也不例外。
你可能還需要重復(fù)運(yùn)行代碼中的某些部分。與大多數(shù)語言一樣,Go提供了循環(huán), 可以多次運(yùn)行某部分代碼。在本章中,我們將學(xué)習(xí)使用條件句和循環(huán)!
調(diào)用方法 32
評分 34
函數(shù)或方法的多個(gè)返回值 36
選項(xiàng)1:使用空白標(biāo)識符忽略錯(cuò)誤返回值 37
選項(xiàng)2:處理錯(cuò)誤 38
條件 39
有條件地記錄致命錯(cuò)誤 42
避免遮蓋名字 44
將字符串轉(zhuǎn)換為數(shù)字 46
塊 49
塊和變量的作用域 50
我們已經(jīng)完成了評分程序 52
短變量聲明中只有一個(gè)變量必須是新的 54
讓我們創(chuàng)建一個(gè)游戲 55
包名與導(dǎo)入路徑 56
生成隨機(jī)數(shù) 57
從鍵盤獲取整數(shù) 59
將猜測與目標(biāo)進(jìn)行比較 60
循環(huán) 61
初始化和標(biāo)志(post)語句是可選的 63
在我們的猜謎游戲中使用循環(huán) 66
中斷我們的猜測循環(huán) 69
顯示目標(biāo) 70
恭喜你,游戲結(jié)束了 72
你的Go工具箱 74
條件語句塊 結(jié)束
條件語句塊 開始
條件語句塊主體
“if”關(guān)鍵字
條件
if 1< 2 {
fmt.Println("It's true!")
}
3 調(diào)用
函數(shù)
你錯(cuò)過了機(jī)會。你一直像專業(yè)人士一樣調(diào)用函數(shù)。但你唯一能調(diào)用的函數(shù)是 Go為你定義的函數(shù)。現(xiàn)在,輪到你了。我們將向你展示如何創(chuàng)建你自己的函數(shù)。 我們將學(xué)習(xí)如何聲明帶參數(shù)和不帶參數(shù)的函數(shù)。我們將聲明返回單個(gè)值的函數(shù), 并且我們將學(xué)習(xí)如何返回多個(gè)值,以便我們可以指示何時(shí)發(fā)生了錯(cuò)誤。我們還將 學(xué)習(xí)指針,它允許我們進(jìn)行更有效的內(nèi)存函數(shù)的調(diào)用。
一些重復(fù)的代碼 80
使用Printf和Sprintf格式化輸出 81
格式化動詞 82
格式化值寬度 83
格式化小數(shù)寬度 84
在油漆計(jì)算器中使用Printf 85
聲明函數(shù) 86
聲明函數(shù)參數(shù) 87
在油漆計(jì)算器中使用函數(shù) 88
函數(shù)和變量的作用域 90
函數(shù)返回值 91
在油漆計(jì)算器中使用返回值 93
paintNeeded函數(shù)需要錯(cuò)誤處理 95
錯(cuò)誤值 96
聲明多個(gè)返回值 97
在paintNeeded函數(shù)中使用多個(gè)返回值 98
始終處理錯(cuò)誤 99
函數(shù)形參接收實(shí)參的副本 102
指針 103
指針類型 104
獲取或更改指針的值 105
函數(shù)指針 107
使用指針修復(fù)我們的“double”函數(shù) 108
你的Go工具箱 110
4 代碼集
包
是時(shí)候整理一下了。到目前為止,我們一直將所有代碼放在一個(gè)文件中。 隨著我們的程序變得越來越大、越來越復(fù)雜,這很快就會變得一團(tuán)糟。
在本章中,我們將向你展示如何創(chuàng)建自己的包,以幫助將相關(guān)代碼集中放在 一個(gè)地方。但是包不僅僅對組織結(jié)構(gòu)有益,它還是在程序之間共享代碼的一種簡單方法,同時(shí)也是與其他開發(fā)人員共享代碼的一種簡單方法。
不同的程序,相同的函數(shù) 114
使用包在程序之間共享代碼 116
Go工作區(qū)目錄保存包代碼 117
創(chuàng)建一個(gè)新包 118
將包導(dǎo)入程序 119
包使用相同的文件布局 120
包命名規(guī)范 123
包限定符 123
將共享代碼移動到包中 124
常量 126
嵌套的包目錄和導(dǎo)入路徑 128
使用“go install”安裝程序可執(zhí)行文件 130
使用GOPATH環(huán)境變量更改工作區(qū) 131
設(shè)置GOPATH 132
發(fā)布包 133
使用“go get”下載和安裝包 137
使用“go doc”閱讀包文檔 139
使用doc注釋記錄包 141
在Web瀏覽器中查看文檔 143
使用“godoc”提供HTML文檔 144
“godoc”服務(wù)器包含你的包 145
你的Go工具箱 146
go
bin
hi pkg
src
greeting
greeting.go hi
main.go
5 列表
數(shù)組
很多程序都處理列表。地址列表、電話號碼列表、產(chǎn)品列表。Go有兩種內(nèi)置 的存儲列表的方法。本章將介紹第一種:數(shù)組。你將了解如何創(chuàng)建數(shù)組,如何用數(shù) 據(jù)填充數(shù)組,以及如何重新獲取這些數(shù)據(jù)。然后你將學(xué)習(xí)如何處理數(shù)組中的所有元 素,首先是使用for循環(huán)的困難些的方法,然后是使用for...range循環(huán)的簡單 些的方法。
數(shù)組保存值的集合 150
數(shù)組中的零值 152
數(shù)組字面量 153
“fmt”包中的函數(shù)知道如何處理數(shù)組 154
在循環(huán)里訪問數(shù)組元素 155
使用“l(fā)en”函數(shù)檢查數(shù)組長度 156
使用“for ... range”安全遍歷數(shù)組 157
在“for ... range”循環(huán)中使用空白標(biāo)識符 158
得到數(shù)組中數(shù)字之和 159
得到數(shù)組中數(shù)字的平均值 161
讀取文本文件 163
將文本文件讀入數(shù)組 166
更新我們的“average”程序來讀取文本文件 168
我們的程序只能處理三個(gè)值 170
你的Go工具箱 172
數(shù)組中將要存儲的元素類型
數(shù)組中將要存儲的元素個(gè)數(shù)
var myArray [4]string
索引0
索引1
索引2
索引3
6 追加的問題
切片
我們已經(jīng)知道了無法將更多的元素增加到一個(gè)數(shù)組中。對于程序的確是個(gè)問題。因?yàn)槲覀儫o法提前知道文件中包含多少個(gè)塊。而這就是Go中的切片 (slice)的用武之地。切片是一個(gè)可以通過增長來保存額外數(shù)據(jù)的集合類型,正好能夠滿足程序的需要!我們將看到切片是如何讓用戶以簡潔的方式在程序中提供 數(shù)據(jù)的,以及如何幫助你寫出更加方便調(diào)用的函數(shù)。
切片 176
切片字面量 177
切片運(yùn)算符 180
底層數(shù)組 182
修改底層數(shù)組,修改切片 183
使用“append”函數(shù)在切片上添加數(shù)據(jù) 184
切片和零值 186
使用切片和“append”讀取額外的文件行 187
嘗試我們改進(jìn)后的程序 189
出錯(cuò)時(shí)返回nil值切片 190
命令行參數(shù) 191
從os.Args切片獲取命令行參數(shù) 192
切片運(yùn)算符可用于其他切片 193
更新程序以使用命令行參數(shù) 194
可變長參數(shù)函數(shù) 195
使用可變長參數(shù)函數(shù) 197
使用可變長參數(shù)函數(shù)計(jì)算平均值 198
向可變長參數(shù)函數(shù)傳遞一個(gè)切片 199
切片拯救了我們 201
你的Go工具箱 202
切片
底層數(shù)組
數(shù)組1
切片1
{"a", "b", "c", "d", "e"}
7 標(biāo)簽數(shù)據(jù)
映射
堆積物品是個(gè)好方法,直到你需要再次找到它。你已經(jīng)看到了如何使用 切片和數(shù)組來創(chuàng)建一列數(shù)據(jù)。但是當(dāng)你需要使用一個(gè)特定的值時(shí)會怎樣?為了找 到它,你需要從數(shù)組或者切片的開頭開始,查看每一個(gè)元素。
如果有一種集合,其中的每個(gè)值都有個(gè)標(biāo)簽在上面,那么你就可以快速找到你需 要的值!在這一章,我們來看映射,它就是做這個(gè)的。
計(jì)票 206
從文件中讀取名字 207
使用困難的切片方法對名字計(jì)數(shù) 209
映射 212
映射字面量 214
映射中的零值 215
映射變量的零值是nil 215
如何區(qū)分已經(jīng)賦值的值和零值 216
使用“delete”函數(shù)刪除鍵/值對 218
使用映射來更新計(jì)票程序 219
對映射進(jìn)行for ... range循環(huán) 221
for ... range循環(huán)以隨機(jī)順序處理映射 223
使用for ... range循環(huán)來更新計(jì)票程序 224
計(jì)票程序完成 225
你的Go工具箱 227
Carlos Diaz
Amber Graham Brian Martin
Mikey Moose
鍵可以使你快速 找到數(shù)據(jù)!
8 構(gòu)建存儲
struct
有時(shí)你需要保存超過一種類型的數(shù)據(jù)。我們學(xué)習(xí)了切片,它能夠保存 一組數(shù)據(jù)。然后學(xué)習(xí)了映射,它能保存一組鍵和一組值。這兩種數(shù)據(jù)結(jié)構(gòu)都只 能保存一種類型。有時(shí),你需要一組不同類型的數(shù)據(jù),例如郵件地址,混合了 街道名(字符串類型)和郵政編碼(整型);又如學(xué)生記錄,混合保存學(xué)生名 字和成績(浮點(diǎn)數(shù))。你無法用切片或者映射來保存。但是你可以使用其他的名為struct的類型來保存。本章會介紹struct的所有信息!
切片和映射保存一種類型的值 232
struct是由多種類型的值構(gòu)建的 233
使用點(diǎn)運(yùn)算符訪問struct字段 234
在struct中保存訂閱者的數(shù)據(jù) 235
定義類型和struct 236
為雜志訂閱者定義一個(gè)類型 238
與函數(shù)一起使用已定義類型 239
使用函數(shù)修改struct 242
通過指針訪問struct的字段 244
使用指針傳遞大型struct 246
將struct類型移動到另一個(gè)包 248
定義類型的名稱首字母必須大寫才能導(dǎo)出該類型 249
struct字段的