Go語言愛好者周刊:第 58 期—關於 context

2020-08-30 Go語言中文網

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

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

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

題圖:Go 在谷歌的使用插圖

刊首語

借用 Dave Cheney 的一道測試題作為這次周刊的刊首語。

以下程序列印什麼?

package mainimport (    &34;    &34;)func f(ctx context.Context) {    context.WithValue(ctx, &34;, -6)}func main() {    ctx := context.TODO()    f(ctx)    fmt.Println(ctx.Value(&34;))}

資訊

1、關於 Go 語言泛型設計的最新進展和一些問題的說明

前段時間 Go 官方發布了新的泛型草案,一時間在社區引起了很大的反響,各種關於泛型的文章、討論湧現出來。8 月 21日 Ian Lance Taylor 在 golang-nuts 討論組總結了泛型設計的最新進展和一些問題的說明。

2、Istio 1.5.10 發布[3]

Istio 是一個由谷歌、IBM 與 Lyft 共同開發的開源項目,旨在提供一種統一化的微服務連接、安全保障、管理與監控方式。具體來說,Istio 是一個開源服務網格平臺,它確保微服務在處理故障時以指定的方式相互連接。這是小版本升級。

3、Kubernetes v1.19.0 正式發布[4]

終於,我們迎來了 Kubernetes 1.19 版本,這是 2020 年的第二個版本,也是迄今為止最長的發布周期,總共持續 20 周。它由 33 項增強功能組成。12 個增強功能進入穩定版,18 個增強功能進入測試版,13 個增強功能進入 alpha 版。

4、net 包將導出 ErrClosed 以便程序可以可靠的判斷當前連結是否已經關閉[5]

從提交可以看到這點。

文章

1、Go 熱重載工具 air 不好使了:goproxy.cn 的鍋?

大家寫開源項目還是需要注意下。

2、我擦~字符串轉字節切片後,切片的容量竟然千奇百怪

給結論,字符串轉字節切片步驟如下:

1)判斷是否是常量, 如果是常量則轉換為等容量等長的字節切片

2)如果是變量, 先判斷生成的切片是否發生變量逃逸

  • 如果逃逸或者字符串長度>32, 則根據字符串長度可以計算出不同的容量
  • 如果未逃逸且字符串長度<=32, 則字符切片容量為32

3、踩了 Go 1.15 sync.Map的一個坑[6]

使用 1.15 的用戶可以注意下。

4、微服務的戰爭:統一且標準化

「微服務的戰爭」 是一個關於微服務設計思考的系列題材,主要是針對在微服務化後所出現的一些矛盾/衝突點,不涉及具體某一個知識點深入。

5、2021 年最佳的後端程式語言會是誰?

Go、Python 還是 NodeJS 等。

6、Go 每日一庫之 go-bindata — 靜態資源嵌入詳解

本文沒有一開始給出最佳實踐,而是從最簡單的做法開始,展示一點一點改進的過程。長度儘量精簡,希望你看到最後。

7、手把手教你用 ETCD:一篇短文卻包含眾多知識

一句話概括的話:ETCD 是一個基於 RAFT 的分布式 KV 存儲系統。

8、都說 Go 可以開啟成千上萬的 Goroutine,那調度器是怎麼處理核上任務分配的?

在 Go 中創建 Goroutine 既方便又快捷,然而 Go 在同一時間內最多在一個核上運行一個 Goroutine,因此需要一種方法來存放其他的 Goroutine,從而確保處理器(processor)負載均衡。

9、容器基礎:Cgroup[7]

Cgroup 是 Control Group 的縮寫,提供對一組進程,及未來子進程的資源限制、控制、統計能力,包括CPU、內存、磁碟、網絡。

10、線上 Go 程序偶爾出現異常怎麼辦?這個思路可解決你的煩惱

Go 項目做的比較大(主要說代碼多,參與人多)之後,可能會遇到類似下面這樣的問題:

  • 程序老是半夜崩,崩了以後就重啟了,我也醒不來,現場早就丟了,不知道怎麼定位
  • 這壓測開壓之後,隨機出問題,可能兩小時,也可能五小時以後才出問題,這我蹲點蹲出痔瘡都不一定能等到崩潰的那個時間點啊
  • 有些級聯失敗,最後留下現場並不能幫助我們準確地判斷問題的根因,我們需要出問題時第一時間的現場

開源項目

1、go-reddit[8]

用於訪問 Reddit API 的庫。

2、modernc/sqlite[9]

一個自包含,無伺服器,零配置的事務型 SQL 資料庫引擎的進程內實現。

3、httpmock[10]

Go 輕量級的 http mock 庫,建立在標準庫 httptest 之上。

4、go-nfs[11]

NFSv3 協議的純 Go 實現。

5、csvstruct[12]

CSV 反序列化為結構體對象庫。

6、golf-engine[13]

GoLF 遊戲引擎。

7、logr[14]

k8s 之父 Tim Hockin 創建的 go log 接口庫。

8、cassandra web ui[15]yulintsai[16] 投稿)

cassandra-web 是一個以 golang&vue.js 為基礎,以 Web-Base 方式架構在網站主機上的 cassandra 的資料庫管理工具,讓管理者可用 Web 界面管理 cassandra 資料庫。

資源&&工具

1、從頭開始用 Go 處理音頻[17]

有關使用 Go 進行音頻處理的一系列文章。介紹了如何使用自己創建的聲波從頭開始創建波形文件。

2、minify[18]

用於 Web 格式(CSS,HTML,JSON 等)的 Go 實現的壓縮工具。這裡有一個在線 Demo:https://go.tacodewolff.nl/minify。

3、maddy[19]

可組合的多合一郵件伺服器。可以用作 MTA,通過 SMTP 接收郵件,存儲郵件甚至通過 IMAP 提供對它們的訪問權限。

4、播客第 134 期[20]

context.Context 的用法與誤用。

5、localchat[21]

Go 編寫的區域網聊天工具。

6、script-httpd[22]

將一個命令行腳本轉換為 Web 服務。

7、gitlab[23]

Go 實現的 gitlab 客戶端命令行工具。

8、油管視頻[24]

Russ Cox 講解 go:build 設計草案。

9、mini-blockchain[25]

基於教學目的區塊鏈的 Go 語言參考實現。

10、go-readelf[26]

用 Go 編寫的 elf 二進位解析實用程序。

11、monsoon[27]

用 Go 編寫的快速靈活的 HTTP enumerator。

參考資料

[1]

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

[2]

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

[3]

Istio 1.5.10 發布: https://www.oschina.net/news/118181/istio-1-5-10-released

[4]

Kubernetes v1.19.0 正式發布: https://dylanmeeus.github.io/tags/goaudio/

[5]

net 包將導出 ErrClosed 以便程序可以可靠的判斷當前連結是否已經關閉: https://github.com/golang/go/commit/e9ad52e46dee4b4f9c73ff44f44e1e234815800f

[6]

踩了 Go 1.15 sync.Map的一個坑: https://purewhite.io/2020/08/24/golang-sync-map-keys-never-delete/

[7]

容器基礎:Cgroup: https://lessisbetter.site/2020/08/27/cgroup-1/

[8]

go-reddit: https://github.com/vartanbeno/go-reddit

[9]

modernc/sqlite: https://gitlab.com/cznic/sqlite

[10]

httpmock: https://github.com/dankinder/httpmock

[11]

go-nfs: https://github.com/willscott/go-nfs

[12]

csvstruct: https://github.com/artyom/csvstruct

[13]

golf-engine: https://github.com/bjatkin/golf-engine

[14]

logr: https://github.com/go-logr/logr

[15]

cassandra web ui: https://github.com/orzhaha/cassandra-web

[16]

yulintsai: https://github.com/yulintsai

[17]

從頭開始用 Go 處理音頻: https://dylanmeeus.github.io/tags/goaudio/

[18]

minify: https://github.com/tdewolff/minify

[19]

maddy: https://github.com/foxcpp/maddy

[20]

播客第 134 期: https://changelog.com/gotime/143

[21]

localchat: https://github.com/fiatjaf/localchat

[22]

script-httpd: https://github.com/beefsack/script-httpd

[23]

gitlab: https://github.com/profclems/glab

[24]

油管視頻: https://www.youtube.com/watch?v=AgR_mdC4Rs4

[25]

mini-blockchain: https://github.com/codingtmd/mini-blockchain

[26]

go-readelf: https://github.com/sad0p/go-readelf

[27]

monsoon: https://github.com/RedTeamPentesting/monsoon

[28]

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

[29]

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

相關焦點

  • Go語言愛好者周刊:第 68 期—一道關於浮點數的題
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。鑑於大部分人可能沒法堅持把英文文章看完,因此,周刊中會儘可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。;7 01:21 victoria-metrics-go-tip這期看一道關於 IEEE-754 浮點數的題,以下代碼輸出什麼?
  • Go語言愛好者周刊:第 66 期—一道關於 fmt 的題
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。鑑於大部分人可能沒法堅持把英文文章看完,因此,周刊中會儘可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。一道關於 json 和 slice 的題難倒了 80% 的人這是上期周刊的問題解答。2、對比三款 Go Playground:你喜歡哪款?官方的弱爆了。。。3、golang 拾遺:指針和接口拾遺主要是收集和 golang 相關的瑣碎知識。
  • Go語言愛好者周刊:第 62 期—今天的題很細節
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。本周刊開源(GitHub:polaris1119/golangweekly[1]),歡迎投稿,推薦或自薦文章/軟體/資源等,請提交 issue[2] 。
  • Go愛好者周刊:第 67期—Go1.16相關功能基本完成了
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。聊聊 10 月 25 日極客時間進行了一場直播,主題是:《未來 5 年將是 Go 語言的天下》。2、一篇理解什麼是CanSet, CanAddr?反射庫中的函數。3、使用 timeout、deadline 和 context 取消參數使 Go net/http 服務更靈活看看超時和它們是如何影響我們的 net/http 服務的。
  • Go愛好者周刊:第 61 期—Go開發的 2048 遊戲
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。本周刊開源(github:polaris1119/golangweekly[1]),歡迎投稿,推薦或自薦文章/軟體/資源等,請提交 issue[2] 。
  • Go愛好者周刊:第 64 期—goup這個工具了解下
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。本周刊開源(GitHub:polaris1119/golangweekly鑑於大部分人可能沒法堅持把英文文章看完,因此,周刊中會儘可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。
  • Go愛好者周刊:第 59 期Go1.16預計支持內嵌靜態資源
    這裡記錄每周值得分享的 Go 語言相關內容,周日發布。本周刊開源(GitHub:polaris1119/golangweekly),歡迎投稿,推薦或自薦文章/軟體/資源等,請提交 issue 。鑑於大部分人可能沒法堅持把英文文章看完,因此,周刊中會儘可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。
  • 在 Go 語言中管理 Concurrency 的三種方式
    相信大家踏入 Go 語言的世界,肯定是被強大的並發(Concurrency)所吸引,Go 語言用最簡單的關鍵字go就可以將任務丟到後臺處理,但是開發者怎麼有效率的控制並發,這是入門 Go 語言必學的技能,本章會介紹幾種方式來帶大家認識並發,而這三種方式分別對應到三個不同的名詞:WaitGroup,Channel,及 Context。下面用簡單的範例帶大家了解。
  • Go 語言十年而立,Go2 蓄勢待發
    第二個重大的變化是2016年發布的Go1.7標準庫引入了context包。context包是Go語言官方對Go進行並發編程的實踐成果,用來簡化對於處理單個請求的多個Goroutine之間與請求域的數據、超時和退出等操作。context包推出後就被社區快速吸收使用,例如gRPC以及很多Web框架都通過context來控制Goroutine的生命周期。
  • 科技愛好者周刊:第 90 期
    周刊討論區的帖子《誰在招人?》[2],提供大量就業信息,歡迎訪問或發布工作/實習崗位。雖然只是小數點後第7位不一樣,但是對於土地測量來說,會導致很大的誤差。1959年,美國決定採用國際英尺,但這不是強制規定,有40個州直到今天還在使用美國英尺,其他州則使用國際英尺。比如,俄勒岡州和華盛頓州就不一樣,連接兩州的橋梁施工,不得不考慮這種差異。2019年10月,美國政府宣布,2022年徹底結束美國英尺的使用,所有州都一律使用國際英尺。
  • 科技愛好者周刊:第 101 期
    周刊討論區的帖子《誰在招人?》[2],提供大量就業信息,歡迎訪問或發布工作/實習崗位。3、RSA 的原理與實現[17](中文)本文用簡單的語言和數學推導,介紹了公鑰加密 RSA 的原理。8、 Swift Playgrounds[38]蘋果公司官方的免費 Mac 桌面軟體,通過遊戲學習 Swift 語言。
  • Go併發模式:Context
    results = append(results, Result{Title: res.TitleNoFormatting, URL: res.URL}) } return nil }) // httpDo waits for the closure we provided to return, so it&39;s github.com/gorilla/context
  • 研發周報第10期:如何創建比C語言更快的程式語言?
    你知道如何創建比C語言更快的程式語言嗎?開發者創建新一門語言通常以C語言為參照對象,將語言編譯時間與C語言進行對比,會因比C語言慢多少而引以自傲。然而,很少有語言能夠擊敗C。那麼,什麼樣的語言才能比C更快呢?
  • 招賢納士-第16期,來自北京和成都的職位
    今天是第16期,還是在朋友圈徵集招聘信息,另外有幾位朋友私信求職,主要有前端開發(初級),DBA和測試工程師(中級和高級)。有需求可以微信留言或者發送郵件jeanrock@126.com,說不定我能幫到你。
  • 詳解Context包,看這一篇就夠了
    context.Context 是Go語言中獨特的設計,在其他程式語言中我們很少見到類似的概念。所以這一期我們就來好好講一講 Context 的基本概念與實際使用,麻麻再也不擔心我的並發編程啦~~~。因此Goroutine可以理解為一種Go語言的協程。同時它可以運行在一個或多個線程上。
  • 解讀Go語言的2020:變革前夜
    作者個人認為,這與 go mod 工具的轉正和推廣,以及「泛型」實現的排期確定是分不開的。 同時,據 StackOverflow(全球最大的編程社區和問答網站)在前不久發布的一份開發者生存報告顯示,Go 語言在 2020 年是繼 Python、Java、C++ 和 C 之後、排名第五的通用型、全平臺程式語言。
  • 科技愛好者周刊(第 116 期):世界的未來是一個火藥桶
    周刊討論區的帖子《誰在招人?》[2],提供大量就業信息,歡迎訪問或發布工作/實習崗位。刊首圖7月12日凌晨,哈爾濱醫生、天文攝影愛好者姜雪鵬拍到了 C/2020F3 彗星。開課吧為周刊讀者提供了一份詳細的 《數據分析知識速查表》,使用高清圖表的形式,列出上面四種技能的學習路徑、詳細知識點和知識脈絡,便於理解和融會貫通。同時,還會贈送數字版的《數據科學技能樹》海報,適合列印出來張貼。
  • 《三聯生活周刊》 第1000期,2018年8月20日出版
    《三聯生活周刊》 第1000期,2018年8月20日出版 【封面故事】與時代同行
  • Go語言HTTP服務生命周期
    在 go 語言裡啟動一個 http 服務非常簡單,只需要一行代碼http.ListenAndServe()就可以搞定,這個方法會一直阻塞著直到進程關閉,如果這個時候來了些特殊的需求比如:監聽服務啟動手動關閉服務監聽服務關閉在 go 中應該怎麼實現呢?下面來一一舉例。
  • 理解真實世界中 Go 的並發 BUG
    有幾個學生研究歸納了go編程中的並發bugs,發表了一篇(英文)論文:《Understanding Real-World Concurrency Bugs in Go》。為你下載好了 PDF,關注公眾號 Go語言中文網,回復 gostudy 獲取。