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

2019-11-11     Go語言中文網

頭條編輯器改版後真心難用,編輯無數次還是沒搞定,所以,乾脆直接貼 Markdown 源碼,建議大家通過文末「了解更多」閱讀。

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

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

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

題圖:Go 10 years

刊首語

馬上雙十一了,又到了剁手的日子了!既然剁手,那不如投資學習 Go 語言。Go 語言中文網的頭條圈子,優惠價 9.9,一起學習Go知識,一起攻克面試題。

(此處已添加圈子卡片,請到今日頭條客戶端查看)

資訊

1、[Grafana 6.4.4 發布,系統指標監控與分析平台](https://www.oschina.net/news/111185/grafana-6-4-4-released)

Grafana 6.4.4 發布了,Grafana 是一個功能豐富的指標標準儀錶板和圖形編輯器,用於分析和監控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。該版本是 Bug 的修復。

2、[Vitess 4.0 發布,MySQL 資料庫集群水平擴展系統](https://www.oschina.net/news/111162/vitess-4-0-0-released)

這是 Go 語言實現的。Vitess 是一個分布式 MySQL 工具集,它可以自動分片存儲 MySQL 數據表,將單個 SQL 查詢改寫為分布式發送到多個 MySQL Server 上,支持行緩存(比 MySQL 本身緩存效率高)與複製容錯等。

3、[Proxy-Go v8.5 發布,全能代理服務工具,專業加速](https://www.oschina.net/news/111074/proxy-go-8-5-released)

Proxy 是 golang 實現的高性能 http、https、websocket、tcp、udp、socks5 代理伺服器,支持正向代理、反向代理、透明代理、內網穿透、TCP/UDP 埠映射、SSH 中轉、TLS 加密傳輸、協議轉換、DNS 防污染智能代理、前置 CDN/Nginx 反代、代理連接重定向、API動態調用上級代理、限速限連接數。同時提供全平台的功能強大的命令行版本和友好易用的 web 控制面板版本。

更新內容:

- tcp代理轉發增加了指定出口IP功能。

- 修復了智能模式某些情況不能準確工作的問題。

- socks/http(s)/sps監聽支持多埠和埠範圍了。

-

參數-p現在可以這樣寫了:

```

-p ":8081" 監聽8081

-p ":8081,:8082" 監聽8081和8082

-p ":8081,:8082,:9000-9999" 監聽8081和8082以及9000,9001至9999,共1002個埠

```

- 增加了freebsd平台。

4、[InfluxDB 1.7.9 發布](https://www.influxdata.com/blog/release-announcement-influxdb-1-7-9/)

將 Golang 版本更新為 1.12.10。

問答

1、[web 框架中的每個請求是一個 goroutine 嗎?](https://studygolang.com/topics/10394)

對 channel 似乎有誤解。

2、[golang 的指針主要用途是不是函數調用的時候傳參數?](https://studygolang.com/topics/10352)

指針的用途有哪些?

3、[golang 如何返回一個有序的map類型的數據](https://segmentfault.com/q/1010000020263981)

golang的map我們知道是無序的, 可是實際應用的時候, 我回經常需要返回一個有序的格式

比如list列表按時間分組排序, 這種的實現思路 應該如何呢?

4、[golang 的靜態文件打包輸出 如何與gin結合作為模板輸出 packr](https://segmentfault.com/q/1010000020928692)

之前gin是通過 router.LoadHTMLGlob("templates/*")

然後指定模板文件名可以直接加載html文件輸出的,

現在我想用 packr 把靜態文件作為資源文件內嵌,怎麼與gin配合?

5、[當golang調用 time.Sleep()時 調度器發生了什麼 G、P和M之間又是怎樣的關係?](https://segmentfault.com/q/1010000020903479)

golang中time.Sleep是如何實現的,在這背後調度器對time.Sleep又是如何處理的?

文章

1、[漫畫:Go 語言的並發](https://mp.weixin.qq.com/s/9xwFapohMkutVRczSmrNfQ)

本文適用於Go的新手,以及想要了解Go的並發原語:go routine 和 channel 的學習者。

2、[排序運行時間能否做到 O(n)?讓Go語言來告訴你](https://mp.weixin.qq.com/s/dHp-OJ0v9yNTazdYSsEKGw)

時間複雜度為 `O(nlogn)` 的最優排序算法中,歸併排序是其中之一。它的原理為將數組分為兩部分,分別進行排序,最後再歸併,這種做法的開銷沒那麼大。

3、[持續集成和部署如何做?一步步教你在k8s上安裝Jenkins](https://mp.weixin.qq.com/s/QcV1ASYiztQ7Jj-VSqy_mQ)

本文分成兩部分,第一部分講正常安裝步驟,如果一切順利,就不需要看第二部分了。我只能說恭喜你,你的運氣太好了。第二部分是講各種問題及解決辦法,這應該是本文最有價值的部分。

4、[開源社區福利,微軟不斷擁抱開源:Go 實現的微服務構建軟體 Dapr 入門](https://mp.weixin.qq.com/s/hVhpet_RCwcgMMwZJnadrg)

微軟開源的微服務套件?我一下子來了興趣,作為一個開發人員,當然是先上手試試手感啦。

5、[好消息,無聞大神又出課程了:Go 語言 Web 應用開發](https://mp.weixin.qq.com/s/TZuHdxvo0rI-X5gxe8FHvQ)

學習Go的,對無聞應該不陌生,可能很多人是看著他的課程入門的。今天,他又出新課程了,你沒有理由不學習!大家可以關注他新開的公眾號:無聞是個碼痴。

本系列課程同步首發在:「無聞是個碼痴」、「Go語言中文網網站」(專欄**Go 語言 Web 應用開發**:https://studygolang.com/subject/479)和公眾號 「Go語言中文網」。

6、[無聞出品 — 第 01 課:初窺 HTTP 伺服器](https://mp.weixin.qq.com/s/341LO-M3_Qj4Kym_Q5O_Zg)

我們不需要依賴任何第三方組件就能構建並啟動一個高並發的 HTTP 伺服器。

7、[無聞出品 — Go 語言 Web 應用開發 第 02 課:基礎模板用法](https://mp.weixin.qq.com/s/XaSe5qYDN3--jPNn7MMYNQ)

這堂課我們來學習如何使用 Go 語言標準庫的 `text/template` 包來向客戶端(即瀏覽器或終端)響應動態的內容。

8、[Go語言中文網和幣威合作,共同打造Go語言區塊鏈社區](https://mp.weixin.qq.com/s/fkB8jDYbikHiOJpiwTmkdg)

後續不斷為大家帶來福利、核心知識!

9、[詳細介紹 Go 中如何實現 bitset](https://mp.weixin.qq.com/s/8gxsnY0fEmixakMsLjLM5g)

最近嘗試在 B 站錄些小視頻。錄視頻當是為了徹底搞懂某個知識點的最後一步吧,同時也希望能習得一些額外的能力。在講 Go 如何實現 bitset 的時候,發現這塊內容有點難講。思考後,我決定通過文字輔以視頻的方式說明,於是就寫了這篇文章。

10、[Go netpoll I/O 多路復用構建原生網絡模型之源碼深度解析](https://mp.weixin.qq.com/s/_NcVrAooHNCl1ae225-_mQ)

本文將基於 linux 平台來解析 Go netpoll 之 I/O 多路復用的底層是如何基於 epoll 封裝實現的,從源碼層層推進,全面而深度地解析 Go netpoll 的設計理念和實現原理,以及 Go 是如何利用 `netpoll`來構建它的原生網絡模型的。

11、[容器中某 Go 服務 GC 停頓經常超過 100ms 排查](https://mp.weixin.qq.com/s/Lk1EbiT7WprVOyX_dXYMyg)

實戰經驗排查問題。

12、[Go語言的遺產(中譯版)](https://tonybai.com/2019/11/04/the-legacy-of-go/)

本文是gohugo作者Steve Francia在義大利佛羅倫斯舉辦的GoLab上分享的閉幕演講講稿的文字版,該演講的主題為"Go的遺產"。該演講討論了Go語言繼承的遺產,以及它是如何尊重這些遺產的,並在最後總結了Go希望留給後來者的遺產。

13、[讓資料庫運行在瀏覽器里?TiDB + WebAssembly 告訴你答案](https://mp.weixin.qq.com/s/n3NAhohDqB-O5NHACEolKQ)

挺有意思!

14、[Go語言開源十周年](https://tonybai.com/2019/11/09/go-opensource-10-years/)

本文翻譯自[Go官方博客](https://blog.golang.org)上[Russ Cox](https://research.swtch.com/)代表Go核心團隊發表的[「Go Turns 10″](https://blog.golang.org/10years)一文。

![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue016/cover.jpg)

15、[Golang template 小抄](https://colobu.com/2019/11/05/Golang-Templates-Cheatsheet/)

這是 Curtis Vermeeren 做的 [Go模板技術的小抄](https://curtisvermeeren.github.io/2017/09/14/Golang-Templates-Cheatsheet)。

16、[為什麼要使用 goroutines 取代 threads](https://juejin.im/post/5dc144c05188255f695be5f8)

goroutines 和 threads 都是為了並發而生。準確的說,並不能說 goroutines 取代 threads。因為其實 goroutines 是建立在一組 threads 之上。將多路並發執行的能力復用在 threads 組上。當某一個 goroutine 需要運行時,會自動將它掛載到一個 thread 上。而且這一系列的調度對開發者是黑盒,無感知的。

開源項目

1、[go-testdeep](https://github.com/maxatome/go-testdeep)

靈活的 Go 深度比較包,用於擴展 go testing 包。

2、[utask](https://github.com/ovh/utask)

一個業務流程建模和執行的自動化引擎。

3、[staticcheck](https://github.com/dominikh/go-tools)

一個 Go 代碼靜態檢查工具集合。這裡有一篇英文版 staticcheck 實戰文章:https://superhighway.dev/staticcheck-in-action 。

4、[gox](https://github.com/mitchellh/gox)

一個超級簡單的跨平台 Go 編譯器。

5、[stripe-cli](https://github.com/stripe/stripe-cli)

用於簡化與國際支付服務 Stripe 集成的工作。

6、[kube-ovn](https://github.com/alauda/kube-ovn)

靈雀雲開源的基於ovn的kubernetes網絡方案。

7、[goque: LevelDB 支持的 Go 持久堆棧和隊列](https://github.com/beeker1121/goque)

現在還支持將對象編碼/解碼為 JSON,從而可以更輕鬆地存儲複雜對象。

8、[lungoDB:與 MongoDB 兼容的可嵌入資料庫和工具包](https://github.com/256dpi/lungo)

想像一下類似 SQLite 的東西,但具有 MongoDB 風味。

9、[dns: Go 實現的 DNS 庫](https://github.com/miekg/dns)

該庫支持大量與DNS相關的RFC和功能。

10、[sqlhooks:為 database/sql 驅動加上鉤子](https://github.com/gchaincl/sqlhooks)

一種簡便的方法來檢測 SQL 查詢。 剛剛進行了近兩年的首次更新,並添加了 go mod 支持。

11、[pkger](https://github.com/markbates/pkger)

將靜態文件嵌入Go二進位文件中(建議替換 gobuffalo/packr)。這裡有一個英文教程:https://golangweekly.com/link/79660/web 。

12、[inletsctl](https://github.com/inlets/inletsctl)

用 Go 編寫的快速的 HTTP (L7) 和 TCP (L4) 隧道。

資源&&工具

1、[go語言golang實現區塊鏈blockchain原始碼](https://www.flysnow.org/2019/11/08/golang-bitcoin-blockchain-sources.html)

為了便於學習Golang區塊鏈,從零入門,分享幾個Go語言實現的區塊鏈項目,可以參考學習,理解區塊、區塊鏈、POW、錢包、交易、記帳等這些術語。

很給力的 Linux 資料,值得收藏查閱。

2、Go每日面試題,「Golang來啦」公眾號已經更新 60 多期了

十分佩服 Seekload 的堅持。日拱一卒,一起成長!Go語言中文網對每日面試題也進行了轉載,歡迎來刷題。

訂閱

這個周刊每周日發布,同步更新在[Go語言中文網](https://studygolang.com/go/weekly)、[微信公眾號](https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91) 和 [今日頭條](https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709)。

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

文章來源: https://twgreatdaily.com/zh-hk/iKrdbW4BMH2_cNUgOq5V.html