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

題圖:golangweekly
刊首語(yǔ)
一道問(wèn)答題:以下代碼可能有什么問(wèn)題?如何改進(jìn)?
type?Stats?struct?{
????mutex?sync.Mutex
????counters?map[string]int
}
func?(s?*Stats)?Snapshot()?map[string]int?{
????s.mutex.Lock()
????defer?s.mutex.Unlock()
????return?s.counters
}
func?(s?*Stats)?Add(name?string,?num?int)?{
????s.Lock()
????defer?s.Unlock()
????s.counters[name]?=?num
}
歡迎留言討論。
資訊
1、Go 標(biāo)準(zhǔn)庫(kù)性能測(cè)試,對(duì)比 Intel 和 蘋(píng)果 M1 處理器[3]
想知道基于 Apple M1 的筆記本電腦與基于 Intel 的筆記本電腦的 Go 性能如何?這個(gè)測(cè)試可以看看。
2、GoLand 2020.3 Beta 版發(fā)布[4]
與“搶先體驗(yàn)計(jì)劃”版本相比,該測(cè)試版非常穩(wěn)定,但是請(qǐng)記住,這里和那里仍然可能存在一些粗糙的地方。
3、GitHub 向開(kāi)發(fā)著妥協(xié),恢復(fù) youtube-dl 項(xiàng)目[5]
下載用。
文章
搶占是調(diào)度器的重要部分,基于搶占調(diào)度器可以在各個(gè)協(xié)程中分配運(yùn)行的時(shí)間。
2、Go 最細(xì)節(jié)篇 — chan 為啥沒(méi)有判斷 close 的接口 ?
相信大家初學(xué) golang chan 的時(shí)候應(yīng)該都遇到過(guò) "send on closed channel" 的 panic 。
3、通過(guò)這個(gè) Runtime 統(tǒng)計(jì)信息可視化庫(kù)學(xué)到了什么?
掌握系統(tǒng)運(yùn)行狀態(tài),知道系統(tǒng)哪些地方可能存在問(wèn)題,方便進(jìn)行優(yōu)化,這是一個(gè)實(shí)際系統(tǒng)必備的。裸奔,對(duì)系統(tǒng)一無(wú)所知,遲早是要出大事的。
4、C++ 調(diào)用 Go 方法的字符串傳遞問(wèn)題及解決方案[6]
C++ 調(diào)用 Go 方法時(shí),字符串參數(shù)的內(nèi)存管理需要由 Go 側(cè)進(jìn)行深度值拷貝。
PingCAP、七牛、掘金。。。
6、Go 語(yǔ)言名人:除了 Rob Pike,很多人可能不知道他
Russ Cox 是 Go Team Leader。
通過(guò)本文的介紹,可得知是由于不同類型導(dǎo)致需要進(jìn)行字節(jié)對(duì)齊,以此保證內(nèi)存的訪問(wèn)邊界。
8、Go 基準(zhǔn)測(cè)試還可以這么搞?高級(jí)基準(zhǔn)測(cè)試
有時(shí)你必須解決不同類型的問(wèn)題。通常來(lái)說(shuō)復(fù)雜的問(wèn)題并不會(huì)只有單一的解決方案,但是解決方案的優(yōu)劣取決于程序在運(yùn)行時(shí)所要解決問(wèn)題的子集。
9、Go 語(yǔ)言之 pprof 的性能調(diào)優(yōu) “燥起來(lái)”[7]
在計(jì)算機(jī)性能調(diào)試領(lǐng)域里,profiling 是指對(duì)應(yīng)用程序的畫(huà)像,畫(huà)像就是應(yīng)用程序使用 CPU 和內(nèi)存的情況。Go 語(yǔ)言是一個(gè)對(duì)性能特別看重的語(yǔ)言,因此語(yǔ)言中自帶了 profiling 的庫(kù),這篇文章就要講解怎么在 golang 中做 profiling。
10、Golang 協(xié)程并發(fā)的流水線模型[8]
總結(jié)下 golang 協(xié)程并發(fā)常用的流水線模型。
11、好未來(lái)開(kāi)源框架 go-zero:如何用它進(jìn)行 rest 開(kāi)發(fā)?
go-zero 是一個(gè)集成了各種工程實(shí)踐的 web 和 rpc 框架,其中 rest 是 web 框架模塊,基于 Go 語(yǔ)言原生的 http 包進(jìn)行構(gòu)建,是一個(gè)輕量的,高性能的,功能完整的,簡(jiǎn)單易用的 web 框架。
據(jù)說(shuō) 2022 年 2 月會(huì)有泛型。
留言比較有料。
開(kāi)源項(xiàng)目
1、gomponents[9]
Go 中的聲明式視圖組件,可以呈現(xiàn)為 HTML5。
2、address[10]
地址處理庫(kù),支持多國(guó)語(yǔ)言。
3、peer-calls[11]
為使用 Go 和 TypeScript 編寫(xiě)的進(jìn)行點(diǎn)對(duì)點(diǎn)視頻通話。
4、ebpf[12]
eBPF 是一個(gè)純 Go 庫(kù),提供用于加載,編譯和調(diào)試 eBPF[13] 程序的實(shí)用程序。它具有最小的外部依賴性,適合在長(zhǎng)時(shí)間運(yùn)行的進(jìn)程中使用。

5、h2go[14]
Apache H2 Go SQL Driver。
6、statsview[15]
實(shí)時(shí) Golang 運(yùn)行時(shí)統(tǒng)計(jì)數(shù)據(jù)可視化分析器。
7、k0s[16]
最小體積的發(fā)行版 k8s。
8、gwda[17]
用 Golang 實(shí)現(xiàn) appium/WebDriverAgent 的客戶端庫(kù),使得 Gopher 也可以編寫(xiě)代碼來(lái)控制 iOS iPadOS 設(shè)備的各種操作。
資源&&工具
1、go-getter[18]
可使用 URL 作為輸入的主要形式從各種來(lái)源下載文件或目錄。
2、gdriver[19]
從 Google Drive 下大文件。
3、油管視頻[20]
深入 go build cache。
4、適合 Go 新手學(xué)習(xí)的開(kāi)源項(xiàng)目[21]
看看有沒(méi)有你需要的。
5、rf[22]
Go 重構(gòu)工具,目前還是實(shí)驗(yàn)階段。
訂閱
這個(gè)周刊每周日發(fā)布,同步更新在Go 語(yǔ)言中文網(wǎng)[23]和微信公眾號(hào)[24]。
微信搜索"Go 語(yǔ)言中文網(wǎng)"或者掃描二維碼,即可訂閱。
上期推薦
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]Go 標(biāo)準(zhǔn)庫(kù)性能測(cè)試,對(duì)比 Intel 和 蘋(píng)果 M1 處理器: https://roland.zone/m1-go-benchmarks/
[4]GoLand 2020.3 Beta 版發(fā)布: https://blog.jetbrains.com/go/2020/11/12/goland-2020-3-goes-beta/
[5]GitHub 向開(kāi)發(fā)著妥協(xié),恢復(fù) youtube-dl 項(xiàng)目: https://github.blog/2020-11-16-standing-up-for-developers-youtube-dl-is-back/
[6]C++ 調(diào)用 Go 方法的字符串傳遞問(wèn)題及解決方案: https://www.cnblogs.com/huaweiyun/p/13998446.html
[7]Go 語(yǔ)言之 pprof 的性能調(diào)優(yōu) “燥起來(lái)”: https://juejin.cn/post/6896453718527442951
[8]Golang 協(xié)程并發(fā)的流水線模型: https://segmentfault.com/a/1190000038212342
[9]gomponents: https://github.com/maragudk/gomponents
[10]address: https://github.com/bojanz/address
[11]peer-calls: https://github.com/peer-calls/peer-calls
[12]ebpf: https://github.com/cilium/ebpf
[13]eBPF: https://ebpf.io/
[14]h2go: https://github.com/jmrobles/h2go
[15]statsview: https://github.com/go-echarts/statsview
[16]k0s: https://github.com/k0sproject/k0s
[17]gwda: https://github.com/electricbubble/gwda
[18]go-getter: https://github.com/hashicorp/go-getter
[19]gdriver: https://github.com/mtojek/gdriver
[20]油管視頻: https://www.youtube.com/watch?v=VVqaFLev19Y
[21]適合 Go 新手學(xué)習(xí)的開(kāi)源項(xiàng)目: https://juejin.cn/post/6896255508983283719
[22]rf: https://github.com/rsc/rf
[23]Go 語(yǔ)言中文網(wǎng): https://studygolang.com/go/weekly
[24]微信公眾號(hào): https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
