Go语言爱好者周刊:第 65 期 — 今天的题你能做对?
这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2] 。
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
由于微信公众号不支持外链,文中大量链接可通过文末「阅读原文」查看。
题图:Cobra 和 CLI,你更喜欢哪个?
刊首语
微信有群友问我这么一道题:
package main
import (
"encoding/json"
"fmt"
)
type AutoGenerated struct {
Age int `json:"age"`
Name string `json:"name"`
Child []int `json:"child"`
}
func main() {
jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}`
a := AutoGenerated{}
json.Unmarshal([]byte(jsonStr1), &a)
aa := a.Child
fmt.Println(aa)
jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}`
json.Unmarshal([]byte(jsonStr2), &a)
fmt.Println(aa)
}
他看到了网上的解释,想不通。我看了下,他看到的解释是不对的。
你觉得输出是什么呢?
资讯
这是两个小版本,主要修复一些 bug。修复的内容包括 cgo、编译器、runtime、go 命令,以及 bytes、plugin 和 testing 包。
2、covid-alert-server[3]
加拿大开源的的 COVID(新冠病毒) 警报服务是用 Go 语言编写的。
3、cobra 1.1 发布[4]
Cobra[5] 是一个构建现代 CLI APP 的框架。
4、Fiber 2.1.0 发布[6]
一个类似 Node 的 Express.js Web 框架。
5、SFTPGo 1.1 发布[7]
Go 内置的功能齐全的 SFTP 服务器。现在也提供了可选的 FTP/S 和 WebDAV 支持。
6、Go 1.16 增加GODEBUG=inittrace=1支持[8]
可以输出各个包初始化(init)的执行时间和内存分配情况。
7、在线教育的企业都有使用 Go 吗?伴鱼招聘 Go 工程师了,看什么要求
在线教育使用 Go 的真不少。
文章
你知道多少?
写一下该内存泄漏的一种形式,并说明它是如何发生的。
有几个学生研究归纳了go编程中的并发bugs,发表了一篇(英文)论文:《Understanding Real-World Concurrency Bugs in Go》。在此做一个笔记,便于查阅。
4、Go 中的 Goroutine 和其他并发处理方案的对比
Go 语言让使用 Goroutine 和通道变得非常有吸引力,作为在 Go 中进行并发的主要方式,它们是被有意识的提出的。
近年来比较流行的一个一致性算法。它的原理比较容易理解,本文从工程的角度来讲讲这个算法的一个具体实现,毕竟了解原理只算是“纸上谈兵”,离真正能把它应用起来还有很长一段距离。
6、你喜欢的 Go 第三方库:一步为系统集成可视化实时运行时统计
掌握系统运行状态,知道系统哪些地方可能存在问题,方便进行优化,这是一个实际系统必备的。裸奔,对系统一无所知,迟早是要出大事的。
7、Go 二进制文件逆向分析系列文章[9]
从理论到实战。
8、关于 runtime.KeepAlive() 你知道多少?
我在看 go101 网站的 类型不安全指针一文时,偶然发现了 runtime 库的一个有趣的新方法 runtime.KeepAlive() 的一个用法。刚开始我对于怎么使用它是很困惑的, 那么按我的性格肯定要探究它是怎么工作的。
开源项目
1、Gohalt: 通用节流库[10]
可以使用它来构建节流管道,速率限制器等。
2、go-password-validator[11]
密码强度校验器。可用于前置密码强度计算,或仅在服务器上验证密码强度。
3、Simple Go Workers[12]
安全地并发运行一组 worker,通过 channel 进行输入输出。
4、sendgrid-go[13]
官方的 SendGrid 主导、社区驱动的 Go API 库。sendgrid 是一个电子邮件服务。
5、xurls[14]
从文本中提取 URL。
6、lossy[15]
模拟 net.PacketConn 和 net.Conn 接口的带宽,延迟和数据包丢失。它的主要用途是测试应用程序的健壮性,以及在不可靠的传输协议(例如 UDP 或 IP)上运行的网络协议。作为附带好处,它还可以用作出站带宽限制器。
7、eggos[16]
一个运行在 x86 裸机上的 go unikernel。
8、kyverno[17]
Kubernetes 原生策略管理。
9、coyim[18]
用 Go 实现安全可靠的聊天客户端。
10、machine[19]
受 errgroup.Group 启发的扩展实现。
资源&&工具
1、benthos[20]
Go 编写的普通任务的流处理器。
2、博客第 148 期[21]
前 Go 团队核心成员、http 库的设计和实现者 Brad Fitzpatrick 专访。
3、rnm[22]
Go 编写的代码重构辅助工具(facebook/codemod 启发)。
4、Go 相关直播信息汇总[23]
官方整理。
5、boundary[24]
hashicorp 开源,一款简单的主机/服务远程安全访问工具。
6、waypoint[25]
Hashicorp 开源,一款用于在任何平台上构建,部署和发布任何应用程序的工具。
7、油管视频[26]
那些你可能从来没用过的 Go 特性。
8、temporal[27]
一个微服务编排平台。
订阅
这个周刊每周日发布,同步更新在Go语言中文网[28]和微信公众号[29]。
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。
参考资料
polaris1119/golangweekly: https://github.com/polaris1119/golangweekly
[2]提交 issue: https://github.com/polaris1119/golangweekly/issues
[3]covid-alert-server: https://github.com/cds-snc/covid-alert-server
[4]cobra 1.1 发布: https://github.com/spf13/cobra/releases/tag/v1.1.0
[5]Cobra: https://cobra.dev/
[6]Fiber 2.1.0 发布: https://github.com/gofiber/fiber/releases/tag/v2.1.0
[7]SFTPGo 1.1 发布: https://github.com/drakkan/sftpgo
[8]Go 1.16 增加GODEBUG=inittrace=1支持: https://github.com/golang/go/commit/7c58ef732efd9bf0d0882bb95371ce1909924a75
[9]Go 二进制文件逆向分析系列文章: https://www.anquanke.com/post/id/214940
[10]Gohalt: 通用节流库: https://github.com/1pkg/gohalt
[11]go-password-validator: https://github.com/lane-c-wagner/go-password-validator
[12]Simple Go Workers: https://github.com/catmullet/go-workers
[13]sendgrid-go: https://github.com/sendgrid/sendgrid-go
[14]xurls: https://github.com/mvdan/xurls
[15]lossy: https://github.com/cevatbarisyilmaz/lossy
[16]eggos: https://github.com/icexin/eggos
[17]kyverno: https://github.com/kyverno/kyverno
[18]coyim: https://github.com/coyim/coyim
[19]machine: https://github.com/autom8ter/machine
[20]benthos: https://github.com/Jeffail/benthos
[21]博客第 148 期: https://changelog.com/gotime/148
[22]rnm: https://github.com/raviqqe/rnm
[23]Go 相关直播信息汇总: https://github.com/golang/go/wiki/LiveStreams
[24]boundary: https://github.com/hashicorp/boundary
[25]waypoint: https://github.com/hashicorp/waypoint
[26]油管视频: https://www.youtube.com/watch?v=5DVV36uqQ4E
[27]temporal: https://github.com/temporalio/temporal/
[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