這裡記錄每周值得分享的 Go 語言相關內容,周日發布。
歡迎投稿,推薦或自薦文章/軟體/資源等,請提交 issue[1] 。
鑑於大部分人可能沒法堅持把英文文章看完,因此,周刊中會儘可能推薦優質的中文文章。優秀的英文文章,我們的 GCTT 組織會進行翻譯。
文中包含大量連結,微信無法點擊,可以通過【閱讀原文】查看。
(題圖來自 Unsplash)
雖然現在不是換工作高峰期,但我們應該時刻準備著,時刻提升自己。本期周刊提供了一系列和面試相關的資源。對於應屆生和工作年限不長的人來說,如果想要進入大廠,算法相關的技能必須得練。可能也正因為如此,目前 LeetCode 很受歡迎,各種語言版本的 LeetCode 刷題都出現了。Go 語言中文網也組織一幫愛好者一起使用 Go 語言刷 LeetCode,如果你有興趣,可以加入進來,https://github.com/studygolang/leetcode 。要加入群,可以加微信:274768166,備註:leetcode。
資訊1、Gitea 1.9.0 is released[2] (英文)
Gitea 是一個開源社區驅動的輕量級代碼託管解決方案,後端採用 Go[3] 編寫,採用 MIT[4] 許可證。如果你公司需要自建 Git 服務,可以考慮適用它,或者使用 Gitea 提供的雲服務:https://gitea.com ,支持無限制的私有項目。
2、Go2試驗、簡化探索之路 (By Russ Cox)[5](英文)
Reddit 上對此相關的討論:https://www.reddit.com/r/golang/comments/ckqoxd/experiment_simplify_ship_the_go_blog_by_russ_cox/
3、WebAssembly San Francisco Meetup[6] (英文)
8 月 20 日有一個 WebAssembly + Go 的主題演講。
4、用免費飲料換 GitHub 上的 star,你換嗎?[7]
5、5 種程式語言可能註定失敗![8]
這 5 種:Ruby、Haskell、Objective-C、R、Perl ,你認可嗎?
文章1、Go:為何帶來泛型 — Go blog[9],由 llgoer 翻譯的中文版[10]
上周舉行的 GopherCon 大會上,Ian Lance Taylor 做了關於 泛型 的演講,該文基於演講和泛型草案討論為什麼要泛型、帶來什麼樣的泛型、好處和成本,以及草案的設計。Go 支持泛型,真的不遠了。
2、Go 微服務框架 go-micro 深度學習筆記[11]
Go 中比較有名的兩個微服務框架:go-micro[12] 和 kit[13]。這幾篇筆記介紹了 go-micro 的一些知識。另外,Go語言中文網 公眾號本周也發布了幾篇關於 go-micro 的文章,正在學習或想學習 go-micro 的小夥伴可以關注閱讀。
3、fasthttp 中運用了哪些 Go 優化技巧
號稱比 net/http 快 10 倍的 fasthttp 到底快在哪裡,做了哪些優化?這些優化技巧,也許在你日常開發中能用到。總結下來主要有:
•
減少 []byte 的分配,儘量去復用它們,如使用 sync.Pool 或 slice = slice[:0] 方式復用
•
方法參數儘量用 []byte,純寫場景可避免用 bytes.Buffer
•不放過能復用內存的地方
•避免 string 與 []byte 轉換開銷
4、httprouter 簡介[14]
Xargin 分享的關於路由和 httprouter 的相關知識,對研究 Go 的 Web 框架有借鑑作用。
5、當你在瀏覽器中輸入 google.com 並且按下回車之後發生了什麼?[15]
中文翻譯:https://github.com/skyline75489/what-happens-when-zh_CN
這是一個古老的面試題,我也跟新人講過很多次。這篇文章講解很詳細。值得一讀。
6、通過 profiling 定位 golang 性能問題 - 內存篇
線上性能問題的定位和優化是程式設計師進階的必經之路,定位問題的方式有多種多樣,常見的有觀察線程棧、排查日誌和做性能分析。性能分析(profile)作為定位性能問題的大殺器,它可以收集程序執行過程中的具體事件,並且對程序進行抽樣統計,從而能更精準的定位問題。本文會以 go 語言的 pprof 工具為例,分享兩個線上性能故障排查過程,希望能通過本文使大家對性能分析有更深入的理解。
7、Golang:資料庫ORM框架GoMybatis詳解[16]
從名字就知曉,這是模仿的 Java 中 iBatis。
在 Go 中,操作資料庫的框架不少,比較知名的有 https://github.com/jinzhu/gorm、https://github.com/go-xorm/xorm,這又來了一個。還有 https://github.com/gohouse/gorose ,非 ORM 的庫 https://github.com/jmoiron/sqlx 等等。這些選擇,你喜歡哪個?
開源項目1、q: 為「疲倦」的 Go 程式設計師提供的快速和更好的調試輸出[17]
提供更好的方式調試輸出,如圖:
2、leetcode badge[18]
有人做了個 leetcode badge,喜歡刷 LeetCode 的,可以試用一下 https://lc.coding.gs/ ,看看自己刷 LeetCode 的情況,間接了解自己的算法水平。
3、ff: 一個 「Flags 優先」的讀取配置包[19]
該庫對 flag.FlagSet 進行了擴展,支持按照命令行、配置文件、環境變量的順序進行讀取。這次的更新,支持從 yaml 配置格式讀取配置。
4、gbt: 用 Go 編寫的高度可配置的 Bash 和 ZSH 快速構建器[20]
Go Bullet Train(GBT):為你的命令行提供漂亮的外衣。Vagrant、Docker、MySQL 有一致的外觀。
5、fastrand: 比 crypto/rand 快 10 倍的安全隨機數生成器[21]
安全的內存分配和性能提升,如果你有使用 crypto/rand 的場景,可以考慮使用 fastrand。另外,對隨機數感興趣的,可以看看該文:《兩個隨機數函數的故事》[22]
在發現這個後,我又看到了另外一個,號稱速度比 fastrand 還要快 10 倍。這就是 frand:https://github.com/lukechampine/frand ,真是沒有最快,只有更快!
6、go-pretty: 在終端輸出漂亮的表格、列表和文本[23]
通過圖片感受下效果:
7、Rate Limiter: 一個 '洩露桶' 速率限制算法的 Go 實現[24]
該實現基於請求之間經過的時間來重新填充桶,而不是要求間隔時鐘離散地填充桶。Uber 出品。
8、go-git: 一個高度可擴展的純 Go 語言實現的 Git[25]
當你想使用慣用的 Go API 處理 git 倉庫時,可以考慮使用該庫。
9、Liftbridge: 輕量級,容錯的消息流[26]
為 NATS[27] 實現持久、多副本的消息日誌的伺服器。
10、micro: 一個微服務開發運行時[28]
該項目的主要特性有:
•API Gateway•Interactive CLI•Service Proxy•Template Generation•Slack Bot•Web Dashboard•Go Framework
想試驗微服務的童鞋,可以學習試用下。
11、gojsonq: 一個查詢 JSON/YAML/XML/CSV 數據的 Go 語言包[29]
該包提供了簡單、優雅、快速的 API 訪問 JSON 等文檔。支持很多類似 SQL 中的語法,如果你有此需求,不妨一試。
12、sampler: 用於 shell 命令執行、可視化和警報的工具[30]
是不是很酷炫!
1、Golang 常見面試題目解析[31]
目錄如下,有一些還沒有內容。
•交替列印數字和字母[32]•判斷字符串中字符是否全都不同[33]•翻轉字符串[34]•判斷兩個給定的字符串排序後是否一致[35]•字符串替換問題[36]•機器人坐標計算[37]•語法題目一[38]•語法題目二[39]•goroutine和channel使用一[40]•實現阻塞讀的並發安全Map[41]•高並發下的鎖與map讀寫問題[42]•定時與 panic 恢復[43]•為 sync.WaitGroup 中Wait函數支持 WaitTimeout 功能.[44]•七道語法找錯題目[45]•golang 並發題目測試[46]
2、Go排序算法和面試相關主題[47]
算法和程序結構一直是在面試過程中不斷被問的問題,但是很多的時候,我們很多都是只是在應用,而沒有深入的去研究這些,所以自己也在不斷的思考和探索,然後分析,學習,總結自己學習的過程,希望可以和大家一起學習和交流下算法!
3、2020年的算法實習崗位信息表[48]
一份整理了各大公司的算法實習崗位信息集合,大部分崗位都是面向 2020 年畢業的學生。該資料還含有常見深度學習算法崗面試題及答案,暑期計算機視覺實習面經和總結,分享給有需要的同學。
4、命令行的藝術[49]
6w+ star,主要總結一些命令行使用的技巧,內容覆蓋面廣包括基礎、日常使用、文件及數據處理等等,且還給出了具體最常用的例子,無論你是新手還是具有經驗的人都值得學習下。
•前言[50]•基礎[51]•日常使用[52]•文件及數據處理[53]•系統調試[54]•單行腳本[55]•冷門但有用[56]•僅限 OS X 系統[57]•僅限 Windows 系統[58]•更多資源[59]•免責聲明[60]
5、針對初學者快速入門開發和使用 Go 的教程[61]
可以選擇性閱讀自己感興趣的內容。
6、Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis) [62]
一款全功能的 LNMP 一鍵安裝程序。可以作為學習 Docker 的資源。
7、一套完整的學習手冊幫助自己準備 Google 的面試[63]
這個項目 8w+ star!
這一長列表是從 Google 的指導筆記 中萃取出來並進行擴展。因此,有些事情你必須去了解一下。我在列表的底部添加了一些額外項,用於解決面試中可能會出現的問題。這些額外項大部分是來自於 Steve Yegge 的「得到在 Google 工作的機會[64]」。而在 Google 指導筆記的逐字間,它們有時也會被反映出來。
致力於去谷歌工作的大學生可以好好學習學習!
8、Go 安全編碼實踐指南[65](英文)
訂閱這個周刊每周日發布,同步更新在Go語言中文網[66]、微信公眾號[67] 和 今日頭條[68]。
微信搜索」Go語言中文網"或者掃描二維碼,即可訂閱。
References[1] 提交 issue: https://github.com/polaris1119/golangweekly/issues
[2] Gitea 1.9.0 is released: https://blog.gitea.io/2019/07/gitea-1.9.0-is-released/
[3] Go: https://golang.org/
[4] MIT: https://github.com/go-gitea/gitea/blob/master/LICENSE
[5] Go2試驗、簡化探索之路 (By Russ Cox): https://blog.golang.org/experiment
[6] WebAssembly San Francisco Meetup: https://www.meetup.com/wasmsf/events/263656826/
[7] 用免費飲料換 GitHub 上的 star,你換嗎?: https://news.cnblogs.com/n/629095/
[8] 5 種程式語言可能註定失敗!: https://blog.csdn.net/csdnnews/article/details/97990640
[9] Go:為何帶來泛型 — Go blog: https://blog.golang.org/why-generics
[10] 中文版: https://github.com/llgoer/go-generics
[11] Go 微服務框架 go-micro 深度學習筆記: https://github.com/lpxxn/gomicrorpc
[12] go-micro: https://github.com/micro/go-micro
[13] kit: https://github.com/go-kit/kit
[14] httprouter 簡介: https://cch123.github.io/httprouter/
[15] 當你在瀏覽器中輸入 google.com 並且按下回車之後發生了什麼?: https://github.com/alex/what-happens-when
[16] Golang:資料庫ORM框架GoMybatis詳解: https://studygolang.com/topics/9755
[17] q: 為「疲倦」的 Go 程式設計師提供的快速和更好的調試輸出: https://github.com/y0ssar1an/q
[18] leetcode badge: https://github.com/haozibi/leetcode-badge
[19] ff: 一個 「Flags 優先」的讀取配置包: https://github.com/peterbourgon/ff
[20] gbt: 用 Go 編寫的高度可配置的 Bash 和 ZSH 快速構建器: https://github.com/jtyr/gbt
[21] fastrand: 比 crypto/rand 快 10 倍的安全隨機數生成器: https://github.com/awnumar/fastrand
[22] 《兩個隨機數函數的故事》: https://studygolang.com/articles/12122
[23] go-pretty: 在終端輸出漂亮的表格、列表和文本: https://github.com/jedib0t/go-pretty
[24] Rate Limiter: 一個 '洩露桶' 速率限制算法的 Go 實現: https://github.com/uber-go/ratelimit
[25] go-git: 一個高度可擴展的純 Go 語言實現的 Git: https://github.com/src-d/go-git
[26] Liftbridge: 輕量級,容錯的消息流: https://github.com/liftbridge-io/liftbridge
[27] NATS: https://nats.io/
[28] micro: 一個微服務開發運行時: https://github.com/micro/micro
[29] gojsonq: 一個查詢 JSON/YAML/XML/CSV 數據的 Go 語言包: https://github.com/thedevsaddam/gojsonq
[30] sampler: 用於 shell 命令執行、可視化和警報的工具: https://github.com/sqshq/sampler
[31] Golang 常見面試題目解析: https://github.com/lifei6671/interview-go
[32] 交替列印數字和字母: https://github.com/lifei6671/interview-go/blob/master/question/q001.md
[33] 判斷字符串中字符是否全都不同: https://github.com/lifei6671/interview-go/blob/master/question/q002.md
[34] 翻轉字符串: https://github.com/lifei6671/interview-go/blob/master/question/q003.md
[35] 判斷兩個給定的字符串排序後是否一致: https://github.com/lifei6671/interview-go/blob/master/question/q004.md
[36] 字符串替換問題: https://github.com/lifei6671/interview-go/blob/master/question/q005.md
[37] 機器人坐標計算: https://github.com/lifei6671/interview-go/blob/master/question/q006.md
[38] 語法題目一: https://github.com/lifei6671/interview-go/blob/master/question/q007.md
[39] 語法題目二: https://github.com/lifei6671/interview-go/blob/master/question/q008.md
[40] goroutine和channel使用一: https://github.com/lifei6671/interview-go/blob/master/question/q009.md
[41] 實現阻塞讀的並發安全Map: https://github.com/lifei6671/interview-go/blob/master/question/q010.md
[42] 高並發下的鎖與map讀寫問題: https://github.com/lifei6671/interview-go/blob/master/question/q011.md
[43] 定時與 panic 恢復: https://github.com/lifei6671/interview-go/blob/master/question/q012.md
[44] 為 sync.WaitGroup 中Wait函數支持 WaitTimeout 功能.: https://github.com/lifei6671/interview-go/blob/master/question/q013.md
[45] 七道語法找錯題目: https://github.com/lifei6671/interview-go/blob/master/question/q014.md
[46] golang 並發題目測試: https://github.com/lifei6671/interview-go/blob/master/question/q015.md
[47] Go排序算法和面試相關主題: https://github.com/KeKe-Li/golang-interview-questions
[48] 2020年的算法實習崗位信息表: https://github.com/HarleysZhang/2019_algorithm_intern_information
[49] 命令行的藝術: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md
[50] 前言: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#前言
[51] 基礎: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#基礎
[52] 日常使用: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#日常使用
[53] 文件及數據處理: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#文件及數據處理
[54] 系統調試: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#系統調試
[55] 單行腳本: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#單行腳本
[56] 冷門但有用: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#冷門但有用
[57] 僅限 OS X 系統: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#僅限-os-x-系統
[58] 僅限 Windows 系統: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#僅限-windows-系統
[59] 更多資源: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#更多資源
[60] 免責聲明: https://github.com/jlevy/the-art-of-command-line/blob/master/README-zh.md#免責聲明
[61] 針對初學者快速入門開發和使用 Go 的教程: https://github.com/KeKe-Li/For-learning-Go-Tutorial
[62] Docker LNMP (Nginx, PHP7/PHP5, MySQL, Redis) : https://github.com/yeszao/dnmp
[63] 一套完整的學習手冊幫助自己準備 Google 的面試: https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md
[64] 得到在 Google 工作的機會: http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html
[65] Go 安全編碼實踐指南: https://github.com/OWASP/Go-SCP
[66] Go語言中文網: https://studygolang.com/go/weekly
[67] 微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
[68] 今日頭條: https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709