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

題圖:Go 實現(xiàn)的模擬器。
刊首語
上期是一道關(guān)于不定參數(shù)的題目:
package?main
import?(
?"fmt"
)
func?f(a?...int)?{
?fmt.Printf("%#v\n",?a)
}
func?main()?{
?f()
}
A:[]int{};B:[]int{nil};C:panic;D:編譯錯誤
正確答案是 B,但卻有 58% 的用戶選的 A。首先,a 的類型是 []int,調(diào)用 f 時,沒有傳遞任何參數(shù),因此相當于值是 nil,即 a 的類型是 []int,值是 nil。而 fmt.Printf 的動詞 %#v 會同時打印類型和值。所以結(jié)果是 B。
資訊
1、imgproxy 3.0 發(fā)布[3]
一個 Go 語言寫的圖片代理網(wǎng)關(guān),可以代理遠程圖片,并且提供格式轉(zhuǎn)換和大小縮放功能。
2、mongo-go-driver 1.8.0 發(fā)布[4]
Mongo 官方出品的驅(qū)動。
3、終于,golang.org 官網(wǎng)被徹底拋棄了
全面使用 go.dev。
4、tailscale v1.8.1 發(fā)布[5]
使用 WireGuard 和 2FA 最簡單、最安全的方法。
文章
通過學習 slices 包,掌握 Go 泛型的使用方法。
了解 recover 或者終止的過程,可以更好地理解一個會發(fā)生 panic 的程序的后果。
本文面總結(jié)了可用的工具,并幫助 Go 用戶針對他們的特定問題選擇正確的工具。
具有監(jiān)控存活的 goroutine 數(shù)量功能的 APM (Application Performance Monitoring) 應用程序性能監(jiān)控可以輕松查出 goroutine 泄漏。
5、在 Go1.18 中實現(xiàn)一個簡單的 Result 類型
Go 中的錯誤處理一直是爭議最多的。Rust 是通過引入 Result 類型來解決此問題。
用圖解的方式介紹了 string 的底層原理以及 rune 類型,同時介紹了 string 在使用中常見的錯誤。
開源項目
1、tally[6]
Uber 開源的高性能、支持緩存的分層的統(tǒng)計信息收集接口。
2、porto[7]
自動為包添加 vanity import path。
3、ramsql[8]
用于測試的內(nèi)存 SQL 引擎。
4、i18n[9]
包 i18n 為你的 Go 應用程序提供國際化和本地化。
5、goconvey[10]
在瀏覽器中進行測試。與 “go test” 集成,在 Go 中編寫行為測試。
6、goi[11]
QOI 是一種無損圖像格式,它提供了加速壓縮和解壓縮以及簡單的實現(xiàn)。
7、r2[12]
Go 極簡的 HTTP 請求路由輔助器。
資源&&工具
1、sniffer[13]
一個現(xiàn)代化的基于 BPF 的跨平臺進程流量分析工具。
2、nes[14]
NES 模擬器。
3、new[15]
用于在 Go 1.18+ 中創(chuàng)建指向新對象指針的輔助函數(shù)。
4、microservices[16]
Go 微服務示例。
訂閱
這個周刊每周日發(fā)布,同步更新在Go語言中文網(wǎng)[17]和微信公眾號[18]。
微信搜索"Go語言中文網(wǎng)"或者掃描二維碼,即可訂閱。
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]imgproxy 3.0 發(fā)布: https://github.com/imgproxy/imgproxy
[4]mongo-go-driver 1.8.0 發(fā)布: https://github.com/mongodb/mongo-go-driver
[5]tailscale v1.8.1 發(fā)布: https://github.com/tailscale/tailscale
[6]tally: https://github.com/uber-go/tally
[7]porto: https://github.com/jcchavezs/porto
[8]ramsql: https://github.com/proullon/ramsql
[9]i18n: https://github.com/go-i18n/i18n
[10]goconvey: https://github.com/smartystreets/goconvey
[11]goi: https://github.com/neguse/goi
[12]r2: https://github.com/aofei/r2
[13]sniffer: https://github.com/chenjiandongx/sniffer
[14]nes: https://github.com/fogleman/nes
[15]new: https://github.com/carlmjohnson/new
[16]microservices: https://github.com/ebosas/microservices
[17]Go語言中文網(wǎng): https://studygolang.com/go/weekly
[18]微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
