Go語言愛好者周刊:第 103 期 — Go 實現(xiàn)的聊天機器人
這里記錄每周值得分享的 Go 語言相關內容,周日發(fā)布。
本周刊開源(GitHub:polaris1119/golangweekly[1]),歡迎投稿,推薦或自薦文章/軟件/資源等,請提交 issue[2] 。
鑒于一些人可能沒法堅持把英文文章看完,因此,周刊中會盡可能推薦優(yōu)質的中文文章。優(yōu)秀的英文文章,我們的 GCTT 組織會進行翻譯。
由于微信公眾號不支持外鏈,文中大量鏈接可通過文末「閱讀原文」查看。

題圖:Go 實現(xiàn)的開源聊天機器人
刊首語
上期是一道關于 channel 的題目,正確率還不錯,達到了 66%。現(xiàn)簡單解釋下。
package main
import (
"fmt"
)
func main() {
c := make(chan int)
close(c)
val, _ := <-c
fmt.Println(val)
}
A:運行時死循環(huán);B:0;C:編譯不通過;D:不確定
答案 B。答案來自標準庫 close 函數(shù)的文檔說明:
After the last value has been received from a closed channel c, any receive from c will succeed without blocking, returning the zero value for the channel element.
即從關閉了的 channel 接收不會堵塞,并返回零值,因此答案是 B。
本期是一道關于 reflect 的題,以下代碼輸出什么?
package main
import (
"fmt"
"reflect"
)
func main() {
i := 1
j := 1
no1 := &i
no2 := &j
if reflect.DeepEqual(no1, no2) {
fmt.Println("equal")
return
}
fmt.Println("not equal")
}
資訊
1、Russ Cox 關于內存模型的系列文章[3]
rsc 通過研究,希望能夠更好的服務 Go 內存模型。
2、Kratos 2.0 發(fā)布[4]
一個國產的 Go 微服務框架。
3、GoLand 2021.2 發(fā)布[5]
表示不增加新特性了。
誰在招 Gopher
整理近期的 Go 職位。有招聘需求可以到「Go招聘」發(fā)布!
文章
1、Go項目實戰(zhàn):從零構建一個并發(fā)文件下載器
今天為大家?guī)硪粋€實戰(zhàn)項目。建議你一定要動手實踐。
2、網(wǎng)友很強大,發(fā)現(xiàn)了Go并發(fā)下載的Bug
處理上篇的留言問題。
Protobuf 幾乎必學的了?
你一般怎么組織?
5、在Go中如何用Redlock實現(xiàn)分布式鎖呢?
在多線程編程環(huán)境中,我們通常使用鎖來限制對共享資源的訪問。互斥鎖就是其中的一個例子。
關于測試的必要性,這里就不多說了,很多人反感寫測試代碼,覺得浪費時間。但實際上寫好測試代碼后,后期代碼調整,能夠節(jié)省大量的調試時間。
很方便。
如果你聽說過表驅動測試,那你就能更容易理解本文所描述的概念,因為它們使用的是相同的技術,只不過本文使用在非測試場景中。
考慮哪些因素?
dig 和 wire 都是 Go 依賴注入的工具,那么,本質上功能相似的工具,為什么要從 dig 切換成 wire?
開源項目
1、certmagic[6]
為任意 Go 程序自動加上 HTTPS,Caddy 使用的一個庫。
2、bluemonday[7]
一個快速的 Go HTML sanitizer,不受信任的用戶輸入的內容,返回可以安全顯示的 HTML 內容。
3、di[8]
一個小巧的依賴注入框架。
4、dragon[9]
簡單的 Web 框架。
5、dtm[10]
國人開源的分布式事務框架。
6、rony[11]
快速可擴展的 RPC 框架。

7、olivia[12]
Olivia 是一個使用機器學習技術用 Golang 建立的開源聊天機器人。它的目標是提供一個免費的、開源的服務來替代像 DialogFlow 這樣的大型服務。
資源&&工具
1、Go 播客第 187 期[13]
討論將要加入 Go 標準庫的 Fuzzing。
2、balerter[14]
基于 Lua 腳本的報警管理,可以發(fā)送到 Slack、Telegram 等。
3、semverbot[15]
一個根據(jù) git 信息自動進行 semver 版本管理的 cli 工具。
4、ADBTuiFM[16]
基于 tui 的 ADB 文件管理器。
5、Dave 講故事(視頻)[17]
Go 是如何避免隱式整數(shù)提升和類型轉換的。
6、d0zer[18]
用 Go 編寫的 Elf 二進制感染器(infector)。
7、GopherChina[19](fanjindong 投稿)
15~21 年歷屆 GopherChina 大會資料。
訂閱
這個周刊每周日發(fā)布,同步更新在Go語言中文網(wǎng)[20]和微信公眾號[21]。
微信搜索"Go語言中文網(wǎng)"或者掃描二維碼,即可訂閱。
往期推薦
Go語言愛好者周刊:第 102 期
參考資料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]Russ Cox 關于內存模型的系列文章: https://research.swtch.com/hwmm
[4]Kratos 2.0 發(fā)布: https://github.com/go-kratos/kratos
[5]GoLand 2021.2 發(fā)布: https://blog.jetbrains.com/go/2021/07/08/goland-2021-2-reaches-beta/
[6]certmagic: https://github.com/caddyserver/certmagic
[7]bluemonday: https://github.com/microcosm-cc/bluemonday
[8]di: https://github.com/go-tk/di
[9]dragon: https://github.com/azerothyang/dragon
[10]dtm: https://github.com/yedf/dtm
[11]rony: https://github.com/ronaksoft/rony
[12]olivia: https://github.com/olivia-ai/olivia
[13]Go 播客第 187 期: https://changelog.com/gotime/187
[14]balerter: https://github.com/balerter/balerter
[15]semverbot: https://github.com/restechnica/semverbot
[16]ADBTuiFM: https://github.com/darkhz/adbtuifm
[17]Dave 講故事(視頻): https://www.youtube.com/watch?v=bwQS7PO6_Ho
[18]d0zer: https://github.com/sad0p/d0zer
[19]GopherChina: https://github.com/fanjindong/GopherChina
[20]Go語言中文網(wǎng): https://studygolang.com/go/weekly
[21]微信公眾號: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91
