Go語言愛好者周刊:第 18 期

2019-11-24   Go語言中文網

這裡記錄每周值得分享的 Go 語言相關內容,周日發布。

本周刊開源(GitHub:polaris1119/golangweekly[1]),歡迎投稿,推薦或自薦文章/軟體/資源等,請提交 issue[2]

由於今日頭條不允許外鏈,文中大量連結只能通過文末「了解更多」查看。

鑒於大部分人可能沒法堅持把英文文章看完,因此,周刊中會儘可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。

題圖:來自 golangweekly.com

刊首語

幾個值得在刊首提的事情:

1、問答方面,能找到的較少,後續考慮引入 stackoverflow.com,工作量不小;歡迎大家貢獻相關資源,提到 https://github.com/polaris1119/golangweekly/issues ;leetcode 的方面的面試題也會是考慮的資源;

2、Go 語言中文網深圳 Meetup 定在 12 月 15 日舉行,免費報名地址:http://hdxu.cn/AVyKG

3、Go.Dev 本土化項目:golangclub 在自願者的努力下,目前完成了很大一部分。

golangclub

資訊

1、cli 2.0: 快速構建 cli 應用[3]

一個歷史悠久的庫,今年重新煥發了生命。這是 v2 手冊[4],其中顯示了所有主要功能。

2、Google App Engine 現在支持 Go1.13[5]

目前處於測試階段,但將 App Engine 帶入了基於模塊的世界,「用戶普遍反饋其內存占用減少了 20%-50%」。

3、BadgerDB v2.0 發布[6]

Badger 是 Go 驅動的鍵值存儲,可支持 DGraph 的許多功能。

4、Go 官方發起 2019 用戶調查[7]

歡迎 Go 愛好者參與。

問答

1、Go 中 在 for 里 的 print[8]

注意 print 和 fmt.Print 的區別。之前分享過。

2、為什麼 golang time 包中的 Unix 函數要返回 int64?[9]

你覺得什麼原因呢?

3、應屆生學 Java 還是 go 好,我現在是 php,勿笑,急?[10]

作為老司機的你覺得怎麼選?

文章

1、Go 開發過程中總是要停下來編譯:用它解決你的煩惱,快樂編程

這樣的工具可能不少,這裡推薦的 air[11] 可以試試。

2、從 Go 開源項目 BigCache 學習加速並發訪問和避免高額的 GC 開銷

BigCache 是一個快速,支持並發訪問,自淘汰的內存型緩存,可以在存儲大量元素時依然保持高性能。BigCache 將元素保存在堆上卻避免了 GC 的開銷。

3、在國外遠程辦公是一種怎樣的體驗?

受到 Go 語言中文網的站長 P 神和公司內其它同事的鼓勵,我經過反覆思考,決定寫下這篇文章描述一下我在 Sourcegraph 這家公司作為一名軟體工程師的日常。

4、由一個簡單程序圖解 Go 語言內存分配和管理

Go 程序的內存從申請階段到不再使用後的釋放階段都由 Go 標準庫自動管理。儘管管理工作不需要開發者參與,但是 Go 對內存管理的底層實現做了非常好的優化,裡面充滿了有意思的知識點,還是值得我們學習的。

5、golang 避坑指南(1)interface 之坑多多

interface 時 golang 編程中使用得非常頻繁的特性,我們需要明白它的底層結構,以及一些編譯和運行時的特殊之處,能幫我們避免一些不必要的麻煩。

6、為什麼 golang 沒有 volatile?

從 java 轉 golang 程式設計師可能會有一個疑問:為什麼 golang 沒有 volatile 關鍵字?這樣的話如何保證可見性?

7、深入淺出 Golang Runtime

基於 2019.02 發布的 go 1.12 linux amd64 版本, 主要介紹了 Runtime 一些原理和實現的一些細節, 對大家容易不容易理解或者網絡上很多錯誤的地方做一些梳理!超長文章。

8、深入理解 Golang 之 http server[12]

對於 Golang 來說,實現一個簡單的http server非常容易,只需要短短几行代碼。同時有了協程的加持,Go 實現的http server能夠取得非常優秀的性能。這篇文章將會對 go 標準庫net/http實現 http 服務的原理進行較為深入的探究,以此來學習了解網絡編程的常見範式以及設計思路。

9、Go 命令行解析 flag 包之快速上手

本篇文章是 Go 標準庫 flag 包的快速上手篇。

10、編程書說的「Go 程式設計師應該讓聚合類型的零值也具有意義」是在講什麼[13]

在《Go 語言編程》這本書和很多其他 Go 編程教程中很多都提到過「Go 程式設計師應該讓一些聚合類型的零值也具有意義」的概念,我們這篇文章主要說一下有意義的零值這個話題。

11、go 學習筆記之咬文嚼字帶你弄清楚 defer 延遲函數

溫故知新不忘延遲基礎。

12、Golang 生態:使用 viper 管理配置

通過配置,我們可以動態地改變程序的行為,常用的方式包括配置文件,命令行參數,環境變量等。

13、用 Go 重構 C 語言系統,這個抗住春晚紅包的百度轉發引擎承接了萬億流量

百度的萬億流量轉發引擎 BFE 登上了 GitHub Trending Top 3!

14、【Golang 源碼系列】一:Map 實現原理分析

學而思網校技術團隊出品。

開源項目

1、Rare: 實時正則表達式提取器[14]

支持將結果聚合展現為各種格式,如直方圖,數值匯總,表格等。

2、gocloc: Go 語言版 cloc(代碼行統計工具)[15]

之前推薦過另外一個工具 scc[16]

3、nebula[17]

在 Slack 每台伺服器上運行的可擴展 overlay 網絡工具,提供了一個全球覆蓋網絡。

4、RedisShake[18]

阿里開源的 Redis 數據同步工具,Go 語言實現。

5、gosearch[19]

通過命令行搜索 pkg.go.dev 上的 Go package。

6、Fastzip[20]

注重性能的zip存檔和提取器。

7、ffuf[21]

用 Go 編寫的快速網絡模糊器。

8、termcolor[22]

檢測終端是否支持顏色。

9、ff[23]

用 Go 編寫的終端上的文件管理器。

資源&&工具

1、Go Time:106 期,代碼編輯器與語言伺服器(language server)[24]

Go Time 還是挺不錯的,有點類似國內的 Go 夜讀?

2、Go Time: 107 期[25]

關於使用 Go 編寫編譯器和解釋器的話題。

3、NATS 在 k8s 上的一鍵安裝工具[26]

4、用 Go 編寫的 UNIX ed (line editor) 克隆版本[27]

古老的編輯器。

5、musig: 一個類似 Shazam 的音樂識別工具[28]

對於想要託管自己的類似 Shazam 的服務以從音頻樣本中識別音樂的所有人,請 Star!

6、Gin 框架系列

  • Gin 框架系列 - 安裝和路由配置
  • Gin 框架系列 - 日誌記錄:Logrus 如何用?
  • Gin 框架系列 - 數據綁定和驗證
  • Gin 框架系列 - 自定義錯誤處理
  • Gin 框架系列 - 你是如何組織項目目錄的?
  • Gin 框架系列 - 使用 go modules 包管理工具

後續不斷發布~

訂閱

這個周刊每周日發布,同步更新在Go 語言中文網[29]微信公眾號[30]今日頭條[31]

微信搜索"Go 語言中文網"或者掃描二維碼,即可訂閱。

文中連結

[1]

polaris1119/golangweekly: https://github.com/polaris1119/golangweekly

[2]

提交 issue: https://github.com/polaris1119/golangweekly/issues

[3]

cli 2.0: 快速構建 cli 應用: https://github.com/urfave/cli

[4]

v2 手冊: https://github.com/urfave/cli/blob/master/docs/v2/manual.md

[5]

Google App Engine 現在支持 Go1.13: https://cloud.google.com/blog/products/application-development/updating-app-engine-with-more-new-runtimes

[6]

BadgerDB v2.0 發布: https://blog.dgraph.io/post/releasing-badger-v2/

[7]

Go 官方發起 2019 用戶調查: https://google.qualtrics.com/jfe/form/SV_b1xqnBCMpZAhJZ3

[8]

Go 中 在 for 里 的 print: https://segmentfault.com/q/1010000021078297

[9]

為什麼golang time包中的Unix函數要返回int64?: https://segmentfault.com/q/1010000021080161

[10]

應屆生學Java還是go好,我現在是php,勿笑,急?: https://www.zhihu.com/question/356754225

[11]

air: https://github.com/cosmtrek/air

[12]

深入理解Golang之http server: https://juejin.im/post/5dd11baff265da0c0c1fe813

[13]

編程書說的「Go程式設計師應該讓聚合類型的零值也具有意義」是在講什麼: https://segmentfault.com/a/1190000021098323

[14]

Rare: 實時正則表達式提取器: https://github.com/zix99/rare

[15]

gocloc: Go語言版cloc(代碼行統計工具): https://github.com/hhatto/gocloc

[16]

scc: https://github.com/boyter/scc

[17]

nebula: https://github.com/slackhq/nebula

[18]

RedisShake: https://github.com/alibaba/RedisShake

[19]

gosearch: https://github.com/mingrammer/gosearch

[20]

Fastzip: https://github.com/saracen/fastzip

[21]

ffuf: https://github.com/ffuf/ffuf

[22]

termcolor: https://github.com/efekarakus/termcolor

[23]

ff: https://github.com/skanehira/ff

[24]

Go Time:106 期,代碼編輯器與語言伺服器(language server): https://changelog.com/gotime/106

[25]

Go Time: 107 期: https://changelog.com/gotime/107

[26]

NATS 在 k8s 上的一鍵安裝工具: https://github.com/nats-io/k8s

[27]

用 Go 編寫的 UNIX ed (line editor) 克隆版本: https://github.com/prologic/ed

[28]

musig: 一個類似 Shazam 的音樂識別工具: https://github.com/sfluor/musig

[29]

Go語言中文網: https://studygolang.com/go/weekly

[30]

微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91

[31]

今日頭條: https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709