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

題圖:TIOBE 8 月 TOP 20 編程語言
刊首語
TIOBE 8 月榜單發(fā)布,SQL、Go 和 Swift 之間的前十之爭。Swift 從 10 降到了 12,Go 排在 11 名。更多信息見:TIOBE 2020 年 8 月編程語言排行榜:值得關(guān)注的依然是 Go、R、Swift 等。
資訊
1、Go 1.14.7 和 Go 1.13.15 發(fā)布;Go1.15 RC2 發(fā)布
安全問題更新,涉及到 encoding/binary 包。如果你項目中有使用,強烈建議更新,否則可能被攻擊。這個安全漏洞存在9年之久了,這里是利用這個漏洞進(jìn)行的攻擊:https://github.com/ethereum/public-attacknets/issues/12。
2、與 Google 的 Ian Lance Taylor 討論 Go[3]
在 C++ podcast 討論 Go!
3、sqlc v1.5.0 發(fā)布[4]
用于從 SQL 創(chuàng)建完全類型的安全 Go 代碼的工具。編寫 SQL 查詢,運行 sqlc,然后編寫調(diào)用 sqlc 生成的方法的應(yīng)用程序代碼。
4、gopls 發(fā)布 v0.4.4[5]
支持單文件編輯。
5、IBM 打算在 z/OS 上支持 Go[6]
受眾會有多少呢?
6、gout v0.1.2 發(fā)布[7]
Golang 實現(xiàn)的 http 客戶端。
文章
1、關(guān)于 errors 包的一些細(xì)節(jié)和思考
看過 errors 包的實現(xiàn)嗎?為什么這么實現(xiàn)?
2、深度剖析 Golang 的 GC 掃描對象的實現(xiàn)
這篇文章把 GC 掃描的過程深入剖析下。
接口值和普通類型值能進(jìn)行相等性比較嗎?結(jié)果如何?
4、通過兩道面試題講解 Go for range 循環(huán)原理
func?main()?{
????v?:=?[]int{1,?2,?3}
????for?i?:=?range?v?{
????????v?=?append(v,?i)
????}
}
會死循環(huán)嗎?
5、接口 Interface—塑造健壯與可擴展的 Go 應(yīng)用程序
本文擬以一個接近實際的項目需求例子,來幫助讀者體會接口使用的重要性,理解 Go 接口 Interface 是如何提高項目的魯棒性和擴展性。
6、值得每個 Gopher 認(rèn)真研讀:工作兩年收獲 PingCAP、頭條和螞蟻的 Offer
值得大家認(rèn)真閱讀和學(xué)習(xí),反思自己。
7、Go 編譯器代碼優(yōu)化導(dǎo)致 for-range 越界的 bug 定位和修復(fù)解析
分析排查問題的方法很重要。
8、Go 語言 Web 框架 Echo 系列:定制篇5—自定義 HTTP Error Handler,讓 HTTP 錯誤處理更友好
Echo 系列框架關(guān)于 HTTP 錯誤處理部分。
介紹下channel在并發(fā)下的兩個使用技巧。
代碼全部使用 Go 完成。
使用了第三方庫。
本文圍繞下面幾點展開:1.講個故事 2.虛擬機與容器 3.認(rèn)識 Docker4.核心概念 5.安裝 Docker6.快速開始 7.常規(guī)操作 8.最佳實踐。
13、如何使用Istio 1.6管理多集群中的微服務(wù)?
討論一下使用 Istio 管理托管在多個 Kubernetes 集群中的微服務(wù)。
14、技術(shù)分享之 golang 構(gòu)建分布式任務(wù)系統(tǒng)[8]
如何使用golang構(gòu)建一個分布式的任務(wù)系統(tǒng) ? 該任務(wù)系統(tǒng)搞了幾個月,有一些經(jīng)驗心得分享給大家。
開源項目
1、defaults[9]
用默認(rèn)值初始化結(jié)構(gòu)體。示例:
type?Gender?string
type?Sample?struct?{
?Name???string?`default:"John?Smith"`
?Age????int????`default:"27"`
?Gender?Gender?`default:"m"`
?Slice???????[]string???????`default:"[]"`
?SliceByJSON?[]int??????????`default:"[1,?2,?3]"`?//?Supports?JSON
?Map?????????map[string]int?`default:"{}"`
?MapByJSON???map[string]int?`default:"{\"foo\":?123}"`
?Struct????OtherStruct??`default:"{}"`
?StructPtr?*OtherStruct?`default:"{\"Foo\":?123}"`
?NoTag??OtherStruct???????????????//?Recurses?into?a?nested?struct?by?default
?OptOut?OtherStruct?`default:"-"`?//?Opt-out
}
type?OtherStruct?struct?{
?Hello??string?`default:"world"`?//?Tags?in?a?nested?struct?also?work
?Foo????int????`default:"-"`
?Random?int????`default:"-"`
}
//?SetDefaults?implements?defaults.Setter?interface
func?(s?*OtherStruct)?SetDefaults()?{
?if?defaults.CanUpdate(s.Random)?{?//?Check?if?it's?a?zero?value?(recommended)
??s.Random?=?rand.Int()?//?Set?a?dynamic?value
?}
}
2、html-to-markdown[10]
使用 Go 將 HTML 轉(zhuǎn)換為 Markdown。它使用 HTML 解析器[11]來盡可能避免使用 regexp。這樣可以避免某些奇怪的情況,并允許將其用于完全未知輸入的情況。

3、go-mysql-server: Go 實現(xiàn)的可擴展 MySQL 服務(wù)器[12]
這是一個 SQL 引擎和服務(wù)器,實現(xiàn)了 MySQL 的一些功能,支持 MySQL SQL語法和 wire 協(xié)議。它本身并不是一個完整的數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫愛好者可以學(xué)習(xí)下。
4、servirtium-go[13]
服務(wù)虛擬化 HTTP:幫助服務(wù)測試自動化,保持快速和一致。適用于 Go 項目。
5、webp[14]
零依賴的 webp 編解碼器。
6、go-mail[15]
Go 實現(xiàn)的輕量級的電子郵件包。
7、osm[16]
微軟開源的輕量級服務(wù)網(wǎng)格實現(xiàn)。
8、got[17]
一款下載速度是 curl 和 wget 4 倍的文件下載工具。
9、di[18]
又一款 Go 依賴注入工具。
10、qmgo[19]
Go 的 MongoDB 驅(qū)動程序。它基于 MongoDB 官方驅(qū)動程序,但像 Mgo 一樣易于使用。七牛出品。
資源&&工具
1、draft[20]
基于 YAML 文件中定義的聲明性語法生成微服務(wù)或無服務(wù)架構(gòu)圖的命令行工具。
2、grofer[21]
Go 實現(xiàn)的系統(tǒng) profiler。

3、gdlv[22]
Go 調(diào)試工具 Delve 的一個 GUI 前端。安裝時,如果 go get 報錯,可以下載源碼,然后 go install 的方式安裝。這個圖形化界面使用的是 gio[23]。

訂閱
這個周刊每周日發(fā)布,同步更新在Go語言中文網(wǎng)[24]和微信公眾號[25]。
微信搜索"Go語言中文網(wǎng)"或者掃描二維碼,即可訂閱。
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]與 Google 的 Ian Lance Taylor 討論 Go: https://cppcast.com/ian-taylor-go/
[4]sqlc v1.5.0 發(fā)布: https://sqlc.dev/posts/2020/08/05/sqlc-one-point-five-released.html
[5]gopls 發(fā)布 v0.4.4: https://github.com/golang/tools/releases/tag/gopls/v0.4.4
[6]IBM 打算在 z/OS 上支持 Go: https://developer.ibm.com/mainframe/2020/04/24/ibm-intends-to-enable-go-on-z-os/
[7]gout v0.1.2 發(fā)布: https://www.oschina.net/news/117750/gout-0-1-2-released
[8]技術(shù)分享之 golang 構(gòu)建分布式任務(wù)系統(tǒng): http://xiaorui.cc/archives/6955
[9]defaults: https://github.com/creasty/defaults
[10]html-to-markdown: https://github.com/JohannesKaufmann/html-to-markdown
[11]HTML 解析器: https://github.com/PuerkitoBio/goquery
[12]go-mysql-server: Go 實現(xiàn)的可擴展 MySQL 服務(wù)器: https://github.com/liquidata-inc/go-mysql-server/
[13]servirtium-go: https://github.com/servirtium/servirtium-go
[14]webp: https://github.com/chai2010/webp
[15]go-mail: https://github.com/mrz1836/go-mail
[16]osm: https://github.com/openservicemesh/osm
[17]got: https://github.com/melbahja/got
[18]di: https://github.com/goioc/di
[19]qmgo: https://github.com/qiniu/qmgo
[20]draft: https://github.com/lucasepe/draft
[21]grofer: https://github.com/pesos/grofer
[22]gdlv: https://github.com/aarzilli/gdlv
[23]gio: https://gioui.org/
[24]Go語言中文網(wǎng): https://studygolang.com/go/weekly
[25]微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
