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

題圖:測試的幾種狀態(tài)
刊首語
上期的題目,正確率只有 28%。一起看看:
func main() {
v := math.Log(-1)
m := map[float64]int{v: 1, v: 2, v: 3}
fmt.Println(m[v], len(m))
}
A:1 1;B:3 1;C:0 3;D:不能編譯
正確答案是 C。首先,math.Log(-1),這是高中數(shù)學(xué),負(fù)數(shù)不能取對數(shù),所以這里的結(jié)果是 NaN,即不是一個數(shù)。這是關(guān)于計算機浮點數(shù)的知識了。對浮點數(shù)知識不熟悉的可以看看該文:《15 張圖帶你深入理解浮點數(shù)》。
關(guān)鍵知識點:任何一個 NaN 都不相等。因此 m[v] 會查找不到,所以返回 int 的默認(rèn)值 0,而 m 中三個元素,key 都是 NaN,因此不相等,所有 len(m) 等于 3。
本期來一道簡單的題目。以下代碼輸出什么?
package main
import (
"fmt"
)
func main() {
num := 65
str := string(num)
fmt.Printf("%v, %T\n", str, str)
}
資訊
1、Go1.18 計劃增加 workspace mode[3]
這樣可以多模塊編輯,可能會增加 go.work 這個文件來控制。
2、Russ Cox 發(fā)推文咨詢建議[4]
Go 是否應(yīng)該增加 int128?issue 見:https://github.com/golang/go/issues/9455。
3、Go語言帶來的生活質(zhì)量提升[5]
這是一個 PPT,回顧了 Go1.16 和 1.17 的變化。
4、chezmoi 2.2.0 發(fā)布[6]
安全地管理你的 DotFiles 跨多種不同的機器。
文章
sync.Once估計大家都不陌生,但用法可以很多。
2、新書推薦:用 Gin 框架構(gòu)建分布式應(yīng)用
英文的。
Stack Overflow 上的一個問題分析。
4、Go:自適應(yīng)負(fù)載均衡算法原理和實現(xiàn)
go-zero 如何實現(xiàn)的?
5、Go泛型是怎么實現(xiàn)的?[7]
Go 的泛型實現(xiàn),可以了解下。
proxy 是近年來 Go 語言最重要的變化之一。
Go 中的通道(channel)機制十分強大,但是理解內(nèi)在的概念甚至可以使它更強大。
Go vet 命令在編寫代碼時非常有用。它可以幫助您檢測應(yīng)用程序中任何可疑、異?;驘o用的代碼。
Go 能實現(xiàn)監(jiān)控模式,歸功于 sync 包和 sync.Cond 結(jié)構(gòu)體。
10、高德渲染網(wǎng)關(guān)Go語言重構(gòu)實踐
高德Go業(yè)務(wù)落地過程是如何實現(xiàn)的,遇到過哪些問題,如何解決?本文將為大家介紹相關(guān)經(jīng)驗。
11、幾行代碼為老板省百萬-某高并發(fā)服務(wù)Go GC及UDP Pool優(yōu)化
鵝廠代碼優(yōu)化。
開源項目
1、centrifugo[8]
可擴展的實時消息服務(wù)器。
2、coraza-waf[9]
Web 應(yīng)用程序防火墻。
3、trafficcontrol[10]
Apache 開源的 Go 實現(xiàn)的 CDN 網(wǎng)絡(luò)。
4、ns-x[11]
一個易于使用、靈活的 Go 網(wǎng)絡(luò)模擬器庫,字節(jié)跳動出品。
資源&&工具
1、gomonkey[12]
一個在單元測試中使用 money patch 的庫。
2、countdown[13]
終端秒表器。
3、star-tex[14]
Go 實現(xiàn)的開源 Tex 引擎。
4、ztrace[15]
Go 實現(xiàn)的 Traceroute。
5、gobencher[16]
GitHub 針對 Go 倉庫提供免費的持續(xù) Benchmark 服務(wù)。
6、微軟教程:使用Go構(gòu)建無服務(wù)器應(yīng)用[17]
基于微軟 Azure 的。
7、termdbms[18]
用于查看和編輯數(shù)據(jù)庫文件的 TUI。目前僅支持 SQLite,很快就會添加對 MySQL 的支持。
訂閱
這個周刊每周日發(fā)布,同步更新在Go語言中文網(wǎng)[19]和微信公眾號[20]。
微信搜索"Go語言中文網(wǎng)"或者掃描二維碼,即可訂閱。
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]Go1.18 計劃增加 workspace mode: https://github.com/golang/go/issues/45713
[4]Russ Cox 發(fā)推文咨詢建議: https://twitter.com/_rsc/status/1433128358683029506
[5]Go語言帶來的生活質(zhì)量提升: https://docs.google.com/presentation/d/1sBXrDYiSCPVBeguQbCJebxIVptjTFKjGOBsElkbp040/edit?resourcekey=0-TM-u9xTZZHUyt3-y9-tZow
[6]chezmoi 2.2.0 發(fā)布: https://github.com/twpayne/chezmoi
[7]Go泛型是怎么實現(xiàn)的?: https://colobu.com/2021/08/30/how-is-go-generic-implemented/
[8]centrifugo: https://github.com/centrifugal/centrifugo
[9]coraza-waf: https://github.com/jptosso/coraza-waf
[10]trafficcontrol: https://github.com/apache/trafficcontrol
[11]ns-x: https://github.com/bytedance/ns-x
[12]gomonkey: https://github.com/agiledragon/gomonkey
[13]countdown: https://github.com/antonmedv/countdown
[14]star-tex: https://git.sr.ht/~sbinet/star-tex
[15]ztrace: https://github.com/zartbot/ztrace
[16]gobencher: https://github.com/marketplace/gobencher
[17]微軟教程:使用Go構(gòu)建無服務(wù)器應(yīng)用: https://docs.microsoft.com/zh-cn/learn/modules/serverless-go/
[18]termdbms: https://github.com/mathaou/termdbms
[19]Go語言中文網(wǎng): https://studygolang.com/go/weekly
[20]微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
