>[success] # 序章
- 本筆記會帶領大家入門 Go 語言, 您將學到如下內容:
- Go 語言的環境搭建
- 第一個應用程序 Hello World
- 語法 1 : 變量,常量,條件語句
- 語法 2 : 數組,切片,集合,協程,通道
- 語法 3 : 函數,結構體,方法,接口
- 語法 4 : 延遲,異常,恢復,指針,反射
- 項目實戰和后續學習
- 面試知識點
- 以上每一小節會給出可運行例子的代碼, 方便大家學習和理解。在講解基礎的過程中順便說下我這幾年用 Go 的心得和遇到的坑, 其中切片,集合,協程, 管道會偏重點介紹。
- 學完語法之后,大家可能還是懵懵懂懂的,好像學會了, 又好像又無從下手。這里的項目實戰和后續學習會提供兩個練手項目的源代碼, 一個是用 Gin 框架寫的留言板, 另一個是用原生 gRPC 寫的微服務案例。
>[info] # 學前準備
- 在進入學習前,先閱讀下面文章了解 Golang 歷史起源、使用、設計、以及可能遇到的問題
- [Golang 常見問題和答案(英文版)](http://docscn.studygolang.com/doc/faq#Origins)
- [Golang 常見問題和答案(翻譯版)](https://blog.csdn.net/u013235478/article/details/86083896)
>[info] # 版本發布歷史
- [Golang 版本發布歷史(英文)](https://docs.studygolang.com/doc/devel/release.html)
- [Golang 各版本特性回顧](https://cloud.tencent.com/developer/article/1628741)
>[info] # 相關閱讀
- [Go語言規范](https://golang.google.cn/ref/spec#Types)
- [Go 語言現狀](https://www.oschina.net/news/130342/the-state-of-go-2020)
- 序章
- 第一章 準備工作
- 搭建環境
- 第一個應用程序 Hello World
- 語法結構
- 第二章 變量,常量
- 2.1 命令規則
- 2.2 變量
- 2.3 常量
- 2.4 常量計數器 iota
- 2.5 零值為 nil 的有哪些
- 2.6 類型推斷的好處
- 2.7 類型別名
- 2.8 Unicode字符編碼
- 2.9 int 是32位還是64位
- 2.10 byte and rune
- 第三章 條件語句
- 3.1 判斷語句 if
- 3.2 選擇語句 switch
- 3.3 循環語句 for
- 3.4 遍歷 range
- 3.5 跳轉語句 goto, break, continue
- 3.6 for 和 for range 區別
- 3.7 for 和 for range 犯過的錯
- 第四章 數組,切片,集合,協程,通道
- 4.1 數組 array
- 4.2 切片 slice
- 4.2.0 切片知識點
- 4.2.1 切片的底層
- 4.2.2 切片擴容
- 4.2.3 切片的使用1
- 4.2.4 切片的使用2
- 4.2.5 切片的使用3
- 4.2.6 切片的使用4
- 4.2.7 切片的copy, append
- 4.2.8 切片數據按某個字段分組
- 4.2.9 字符串和切片的底層
- 4.2.10 我是否可以將 [] T1 轉換為 [] T2 如果 T1 和 T2 有相同的基礎類型?
- 4.2.11 切片的排序
- 4.2.12 將切片類型聲明為指針類型的場景
- 4.2.13 為什么 Go 不支持 []T 轉換為 []interface
- 4.3 集合 map
- 4.3.0 map 知識點
- 4.3.1 map的底層
- 4.3.2 map等量擴容
- 4.3.3 map的使用
- 4.3.4 map無序輸出和有序輸出
- 4.3.5 并發錯誤 fatal error: concurrent map writes
- 4.3.6 并發安全字典
- 4.4 協程 goroutine
- 4.4.0 進程、線程、協程知識點
- 4.4.1 goroutine的底層
- 4.4.2 并發和并行
- 4.4.3 goroutine的使用
- 4.5 通道 channel
- 4.5.1 channel相關概念
- 4.5.2 select處理channel
- 4.5.3 for range處理channel
- 4.6 make 和 new 的區別
- 4.7 cap 和 len
- 第五章 函數,結構,方法,接口
- 5.1 函數 function
- 5.1.1 簡單使用
- 5.1.2 匿名函數
- 5.1.3 閉包函數
- 5.1.4 遞歸
- 5.1.5 尾遞歸
- 5.1.6 迭代
- 5.1.7 回調函數
- 5.2 結構體 struct
- 5.2.1 簡單使用
- 5.2.2 Json 序列化和反序列化
- 5.2.3 序列化時過濾字段
- 5.2.4 兩個內部結構一樣名稱不同的結構體能否比較
- 5.3 方法 method
- 5.3.1 簡單使用
- 5.4 接口 interface
- 5.4.1 簡單使用
- 5.5 T 和 *T
- 第六章 延遲,異常,恢復,指針,反射
- 6.1 延遲 defer
- 6.1.1 例子1
- 6.1.2 例子2
- 6.2 異常 panic 和 恢復 recover
- 6.3 defer 和 panic
- 6.4 指針
- 6.4.1 指針1
- 6.4.2 指針2
- 6.4.3 傳值 or 傳指針 ?
- 6.4.4 使用指針和不使用指針的場景
- 6.5 指針(補充: 可尋址和不可尋址)
- 6.6 反射
- 第七章 練手項目和后續學習
- 7.1 留言板1
- 7.2 留言板2
- 7.3 后續學習
- 7.4 學習資料
- 技術擴展閱讀