Go语言爱好者周刊:第 55 期
这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图:TIOBE 8 月 TOP 20 编程语言
刊首语
TIOBE 8 月榜单发布,SQL、Go 和 Swift 之间的前十之争。Swift 从 10 降到了 12,Go 排在 11 名。更多信息见:TIOBE 2020 年 8 月编程语言排行榜:值得关注的依然是 Go、R、Swift 等。
资讯
1、Go 1.14.7 和 Go 1.13.15 发布;Go1.15 RC2 发布
安全问题更新,涉及到 encoding/binary 包。如果你项目中有使用,强烈建议更新,否则可能被攻击。这个安全漏洞存在9年之久了,这里是利用这个漏洞进行的攻击:https://github.com/ethereum/public-attacknets/issues/12。
2、与 Google 的 Ian Lance Taylor 讨论 Go
在 C++ podcast 讨论 Go!
用于从 SQL 创建完全类型的安全 Go 代码的工具。编写 SQL 查询,运行 sqlc,然后编写调用 sqlc 生成的方法的应用程序代码。
支持单文件编辑。
受众会有多少呢?
Golang 实现的 http 客户端。
文章
看过 errors 包的实现吗?为什么这么实现?
这篇文章把 GC 扫描的过程深入剖析下。
接口值和普通类型值能进行相等性比较吗?结果如何?
func main() {
v := []int{1, 2, 3}
for i := range v {
v = append(v, i)
}
}
会死循环吗?
5、接口 Interface—塑造健壮与可扩展的 Go 应用程序
本文拟以一个接近实际的项目需求例子,来帮助读者体会接口使用的重要性,理解 Go 接口 Interface 是如何提高项目的鲁棒性和扩展性。
6、值得每个 Gopher 认真研读:工作两年收获 PingCAP、头条和蚂蚁的 Offer
值得大家认真阅读和学习,反思自己。
7、Go 编译器代码优化导致 for-range 越界的 bug 定位和修复解析
分析排查问题的方法很重要。
8、Go 语言 Web 框架 Echo 系列:定制篇5—自定义 HTTP Error Handler,让 HTTP 错误处理更友好
Echo 系列框架关于 HTTP 错误处理部分。
介绍下channel在并发下的两个使用技巧。
代码全部使用 Go 完成。
使用了第三方库。
本文围绕下面几点展开:1.讲个故事 2.虚拟机与容器 3.认识 Docker
4.核心概念 5.安装 Docker
6.快速开始 7.常规操作 8.最佳实践。
讨论一下使用 Istio 管理托管在多个 Kubernetes 集群中的微服务。
如何使用golang构建一个分布式的任务系统 ? 该任务系统搞了几个月,有一些经验心得分享给大家。
开源项目
1、defaults
用默认值初始化结构体。示例:
type Gender string
type Sample struct {
Name string `default:"John Smith"`
Age int `default:"27"`
Gender Gender `default:"m"`
Slice []string `default:"[]"`
SliceByJSON []int `default:"[1, 2, 3]"` // Supports JSON
Map map[string]int `default:"{}"`
MapByJSON map[string]int `default:"{\"foo\": 123}"`
Struct OtherStruct `default:"{}"`
StructPtr *OtherStruct `default:"{\"Foo\": 123}"`
NoTag OtherStruct // Recurses into a nested struct by default
OptOut OtherStruct `default:"-"` // Opt-out
}
type OtherStruct struct {
Hello string `default:"world"` // Tags in a nested struct also work
Foo int `default:"-"`
Random int `default:"-"`
}
// SetDefaults implements defaults.Setter interface
func (s *OtherStruct) SetDefaults() {
if defaults.CanUpdate(s.Random) { // Check if it's a zero value (recommended)
s.Random = rand.Int() // Set a dynamic value
}
}
使用 Go 将 HTML 转换为 Markdown。它使用 HTML 解析器来尽可能避免使用 regexp。这样可以避免某些奇怪的情况,并允许将其用于完全未知输入的情况。
3、go-mysql-server: Go 实现的可扩展 MySQL 服务器
这是一个 SQL 引擎和服务器,实现了 MySQL 的一些功能,支持 MySQL SQL语法和 wire 协议。它本身并不是一个完整的数据库系统。数据库爱好者可以学习下。
服务虚拟化 HTTP:帮助服务测试自动化,保持快速和一致。适用于 Go 项目。
5、webp
零依赖的 webp 编解码器。
6、go-mail
Go 实现的轻量级的电子邮件包。
7、osm
微软开源的轻量级服务网格实现。
8、got
一款下载速度是 curl 和 wget 4 倍的文件下载工具。
9、di
又一款 Go 依赖注入工具。
10、qmgo
Go 的 MongoDB 驱动程序。它基于 MongoDB 官方驱动程序,但像 Mgo 一样易于使用。七牛出品。
资源&&工具
1、draft
基于 YAML 文件中定义的声明性语法生成微服务或无服务架构图的命令行工具。
2、grofer
Go 实现的系统 profiler。
3、gdlv
Go 调试工具 Delve 的一个 GUI 前端。安装时,如果 go get 报错,可以下载源码,然后 go install 的方式安装。这个图形化界面使用的是 gio。
订阅
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。