Go語言愛好者周刊:第 53 期
這里記錄每周值得分享的 Go 語言相關(guān)內(nèi)容,周日發(fā)布。
本周刊開源(GitHub:polaris1119/golangweekly[1]),歡迎投稿,推薦或自薦文章/軟件/資源等,請提交 issue[2] 。
鑒于大部分人可能沒法堅持把英文文章看完,因此,周刊中會盡可能推薦優(yōu)質(zhì)的中文文章。優(yōu)秀的英文文章,我們的 GCTT 組織會進行翻譯。
由于微信公眾號不允許外鏈,文中大量鏈接可通過文末 「閱讀原文」 查看。

題圖:靜態(tài)資源內(nèi)嵌入 Go 二進制文件中
刊首語
本周我制作了一些 Cheat Sheet 發(fā)布在朋友圈,不少人挺喜歡這種。于是我準備整理、制作更多的 Cheat Sheet,方便大家快速查看、學(xué)習(xí)。目前已經(jīng)有一些了,大家覺得不錯,請給項目來個 Star 吧:https://github.com/polaris1119/awesome-cheatsheets-cn,你的支持是我持續(xù)整理的動力。

資訊
1、嵌入靜態(tài)資源的 Go Command 支持的設(shè)計草案[3]
去年 12 月,我們提到了一個提案[4],該提案將 Go 二進制文件中的 assets/files 的嵌入引入到主 Go 工具集中(與使用 Packr[5] 等現(xiàn)有工具相比)– Brad Fitzpatrick 現(xiàn)在返回了設(shè)計草案供我們仔細研究(其中包括鏈接到 15 個替代實現(xiàn))。Russ Cox 還錄制了視頻演示[6],介紹了設(shè)計草案在實踐中的工作方式。
2、Go 的新文件系統(tǒng)接口的設(shè)計草案[7]
同樣有視頻演示[8],介紹了 io/fs,這是一個新包,它定義了只讀文件樹的接口。上周剛介紹了一個類似的庫 afero[9]。
3、go2go Playground 現(xiàn)在支持新版泛型[10]
上周提到在討論用 () 還是 []。這個支持的是 [] 版本。
4、模糊測試設(shè)計草案[11]
之前周刊介紹過類似的第三方方案,現(xiàn)在官方計劃支持,可見模糊測試(Fuzzing)的重要性。
5、goldmark 1.2.0 發(fā)布[12]
擁有易于擴展且與 CommonMark 兼容的優(yōu)勢。寫過一篇文章專門介紹這個庫。專為 Gopher 準備的 Markdown 教程。
6、GoLand 2020.2 Beta 版發(fā)布:go.mod 升級以及對泛型的實驗性支持
GoLand 2020.2 達到 Beta。這意味著我們將結(jié)束一連串的新功能開發(fā),將重點轉(zhuǎn)移到完善我們已經(jīng)完成的工作上,并開始計算發(fā)布日之前的日子!
7、Go 1.15 RC1 發(fā)布[13]
8 月臨近,1.15 也臨近了。
文章
1、由一個問題引發(fā)的 goroutine 相關(guān)源碼的探究
本文基于 Go 語言 1.13.x 版本進行分析。
假設(shè),但不是憑空想象,在你的程序中,你注冊了一堆 expvar 包的統(tǒng)計變量,用來在暴露出去的 JSON 結(jié)果中能有一個容易辨識的名字。
3、go runtime debug 小技巧[14]
本意是打算研究一下 Go 程序的啟動流程,然后就去網(wǎng)上搜索了一下入門教程。結(jié)果令我有點沮喪,搜到的幾乎所有文章開篇都是通過 GDB 調(diào)試, 然后就是不同平臺下的匯編代碼。。。
4、Go 編程: 如何實現(xiàn)協(xié)程調(diào)度的精準控制[15]
說起 Go 協(xié)程的調(diào)度,如果你了解 Go 調(diào)度器以及其實現(xiàn)的 G/P/M 模型,當然有助于應(yīng)用的開發(fā)。但是在應(yīng)用層面上,這些底層的調(diào)度原理并不會幫你太多,實現(xiàn) Go 協(xié)程的精準調(diào)度得完全靠自己。
5、字節(jié)跳動踩坑記:Go 服務(wù)內(nèi)存暴漲
學(xué)習(xí)問題分析的過程。
6、雨痕公開課4.3.1返回值內(nèi)存分配[16]
局部變量內(nèi)存由所在函數(shù)分配,但返回值內(nèi)存卻是由調(diào)用方(calller)提供。這種差別會導(dǎo)致某些行為上的差異,比如 defer 操作結(jié)果。
7、哪個更快?對 gRPC 的 Rust 和 Go 版本進行基準測試
結(jié)果可能出乎意料。
DDD 是什么?是否適合你現(xiàn)在的公司?
GC(Garbage Collection)即垃圾回收,本文從文件系統(tǒng)層面分析了 registry GC 原理,相比源碼分析更加直觀,并提示了一些可能遇到的錯誤,幫助大家避免踩坑。
9、Go 語言 Web 框架 Echo 系列:定制篇3 — 自定義 Logger,用你喜歡的日志庫
在知識星球簡書項目中,我們分析對比了目前的一些日志庫。雖然 Go 標準庫有一個 log,但功能有限,所以才出現(xiàn)了很多第三方的日志庫。
Dave Cheney 在 Twitter 上發(fā)布過一個 Go 的小測驗,和往常一樣,我從中學(xué)到了一些有趣的東西。
開源項目
1、Evergreen: 來自 MongoDB 的分布式持續(xù)集成系統(tǒng)[17]
由 MongoDB 構(gòu)建以測試 MongoDB,但它是用 Go 語言編寫的,可動態(tài)分配主機以跨多臺機器并行運行任務(wù)。
2、pebble[18]
受 LevelDB/RocksDB 啟發(fā)的 KV 存儲。
3、xmlquery[19]
用于 XML 查詢的 Golang XPath 軟件包。
4、query2metric[20]
把 DB 查詢轉(zhuǎn)換為 prometheus 指標。
5、number-verifier[21]
Golang 實現(xiàn)的 SMS 驗證工具,輕松獲取一次性 SMS 號碼。
6、go-flow-levee[22]
該靜態(tài)分析工具可確保您程序的數(shù)據(jù)流不會溢出到其庫之外,從而保證避免暴露敏感數(shù)據(jù)。
7、stash[23]
備份 k8s 中有狀態(tài)應(yīng)用的工具。
8、go-fileserver[24]
通過二維碼在同一網(wǎng)絡(luò)下分享文件。
資源&&工具
1、油管視頻[25]
Unix、C、Go 和人工智能。
2、油管視頻[26]
使用 Go 構(gòu)建支持并發(fā)的下載管理器。
3、Gopher 讀物清單[27](英文)
在整個材料中,有大量鏈接指向外部的閱讀和視頻。有時,我們遇到一些我們認為很重要的材料,沒有確切的放置位置。
4、第 97 期視頻回放:我們可以從 mosn 和相關(guān)的項目中學(xué)習(xí)到什么[28]
mosn 是什么?
5、播客第 138 期[29]
與 Go 語言相伴的第一周。
6、Go 風(fēng)格指南匯總[30]
匯總了各種公司的風(fēng)格指南。
7、播客第 139 期[31]
Testify 的未來。
訂閱
這個周刊每周日發(fā)布,同步更新在Go語言中文網(wǎng)[32]和微信公眾號[33]。
微信搜索"Go語言中文網(wǎng)"或者掃描二維碼,即可訂閱。
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]嵌入靜態(tài)資源的 Go Command 支持的設(shè)計草案: https://github.com/golang/proposal/blob/master/design/draft-embed.md
[4]提案: https://github.com/golang/go/issues/35950
[5]Packr: https://golangweekly.com/link/92420/web
[6]視頻演示: https://golangweekly.com/link/92421/web
[7]Go 的新文件系統(tǒng)接口的設(shè)計草案: https://github.com/golang/proposal/blob/master/design/draft-iofs.md
[8]視頻演示: https://www.youtube.com/watch?v=yx7lmuwUNv8
[9]afero: https://github.com/spf13/afero
[10]go2go Playground 現(xiàn)在支持新版泛型: https://go2goplay.golang.org/p/7zFKUcpzhvZ
[11]模糊測試設(shè)計草案: https://github.com/golang/proposal/blob/master/design/draft-fuzzing.md
[12]goldmark 1.2.0 發(fā)布: https://github.com/yuin/goldmark
[13]Go 1.15 RC1 發(fā)布: https://tip.golang.org/doc/go1.15
[14]go runtime debug 小技巧: https://www.jianshu.com/p/f32b51f54173
[15]Go 編程: 如何實現(xiàn)協(xié)程調(diào)度的精準控制: https://www.gitdig.com/post/go-schedule-control/
[16]雨痕公開課4.3.1返回值內(nèi)存分配: https://www.yuque.com/docs/share/5a0474df-5bed-4aca-a1a2-82b58a16fc77
[17]Evergreen: 來自 MongoDB 的分布式持續(xù)集成系統(tǒng): https://github.com/evergreen-ci/evergreen
[18]pebble: https://github.com/cockroachdb/pebble
[19]xmlquery: https://github.com/antchfx/xmlquery
[20]query2metric: https://github.com/yolossn/query2metric
[21]number-verifier: https://github.com/upmasked/number-verifier
[22]go-flow-levee: https://github.com/google/go-flow-levee
[23]stash: https://github.com/stashed/stash
[24]go-fileserver: https://github.com/prdpx7/go-fileserver
[25]油管視頻: https://www.youtube.com/watch?v=O9upVbGSBFo
[26]油管視頻: https://www.youtube.com/watch?v=vdhSk8vCx-k
[27]Gopher 讀物清單: https://github.com/ardanlabs/gotraining/blob/master/reading/README.md
[28]第 97 期視頻回放:我們可以從 mosn 和相關(guān)的項目中學(xué)習(xí)到什么: https://talkgo.org/t/topic/568
[29]播客第 138 期: https://changelog.com/gotime/138
[30]Go 風(fēng)格指南匯總: https://github.com/dgryski/awesome-go-style
[31]播客第 139 期: https://changelog.com/gotime/139
[32]Go語言中文網(wǎng): https://studygolang.com/go/weekly
[33]微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
