Go语言爱好者周刊:第 30 期
这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图来自:json.org
刊首语
不得不感叹,Go 的 JSON 库层出不穷。这期周刊又新出现了两个。其他语言,比如 Java,官方标准库没有 json,所以有各种第三方库。但 Go 是有标准库 JSON 库的。只能说 JSON 现在太流行,其次大家对标准库不满足,比如性能、功能。
出现的第三方 JSON 库,一般着重解决两个问题:
- 嫌弃标准库性能太差,主打自己性能棒,比如:valyala/fastjson、mailru/easyjson、buger/jsonparser、pquerna/ffjson、json-iterator/go 等,还有好多,不一一列举。感觉有点国内之前视频网站的感觉,都号称自己是最大的。这些库不少号称是自己是最快的,但充斥着矛盾,比如:buger/jsonparser 说它最快,比标准库快 10 倍,但 valyala/fastjson 说它比标准库快 15 倍。我个人感觉,这块真是瓶颈时,再来琢磨吧,平常大家用用标准库或从这一堆中挑一个 star 高的,API 用着顺的就行。这里有些是代码生成的,我个人很不喜欢;
- 嫌弃标准库功能太弱,主要提供更多功能,比如:tidwall/gjson、tidwall/sjson。当然,有些主打快的,也提供了额外的功能,比如 fastjson、jin 等;
最后列出目前看到的其他一些 JSON 库(本文后面有的两个库不在其中),你还知道哪些?官方看到这么多,不知道作何感想?
- https://github.com/Jeffail/gabs
- https://github.com/a8m/djson
- https://github.com/bitly/go-simplejson
- https://github.com/antonholmquist/jason
- https://github.com/mreiferson/go-ujson
- https://github.com/ugorji/go/codec
资讯
1、Go1.13.8 和 Go1.12.7 发布,Go1.14 Delay 13 天,还有些 bug 没解决
2 月 13 日,Go Team 发布了 Go1.13.8 和 Go1.12.7,这是两个小版本。主要包括修复 runtime、crypto/x509、net/http 三个包的一些小 bug。Go1.13.8 修复的 bug 见 Go 1.13.8 milestone 。建议大家升级到 Go1.13.8,下载地址:https://studygolang.com/dl
2、Go 语言 Excel 文档基础库发布 2.1.0 版本
Excelize 是 Go 语言编写的用于操作 Office Excel 文档类库,基于 ECMA-376 Office Open XML 标准。
3、BookStack v2.5 发布,功能类似 GitBook 长相清秀的文档管理系统
BookStack,基于 Mindoc、使用 Go 语言的 Beego 框架开发的功能类似GitBook和看云的在线文档管理系统,实现了文档采集、导入、电子书生成以及版本控制等强大的文档功能,并推出了配套的开源微信小程序 BookChat 和使用uni-app
开发的开源手机APP BookChatApp。
该版本更新了很多功能。
一个长期的项目,在本周刚刚增加了对 Linux/ARM64 的支持,以及对即将发布的 Go1.14 的支持。
6、重磅!免费获得官方赠送GoLand,还有专属T恤:只要免费试用最新2020.1版
GoLand 2020.1 抢先体验计划已经启动。对于此发行版,我们着重于易用性,性能以及减少浪费在样板代码和 IDE 中的冗余操作上的时间。
非常灵活的 golang 深度比较包,扩展了 go 测试包。
基于 Material Design 的 Go 跨平台 GUI。这次更新支持 Android 和 iOS。不过实话主页上的示例,看着也太丑了?
文章
1、更懂 module 的包资源中心:关于 pkg.go.dev 的前世今生和未来
本文就官方的博文和 Google 邮件组上的相关内容进行整理总结,分享给大家。
Go 被用得最频繁的命令我想应该是go test
。然而,这个命令一些有趣的细节和用法可能你还不知道哟。下面让我们从测试本身讲起。
Go官方团队将在今年2月份发布1.14版本。相比较于之前的版本升级,Go1.14在性能提升上做了较大改动,还加入了很多新特性,我们一起来看一下Go1.14都给我们带来了哪些惊喜吧!
4、依赖的第三方接口太慢影响自己的Go服务:掌握context的使用问题不再
context 包在 Go 1.7 中引入,它为我们提供了一种在应用程序中处理 context 的方法。这些 context 可以为取消任务或定义超时提供帮助。通过 context 传播请求的值也很有用,但对于本文,我们将重点关注 context 的取消功能。
5、LeetCode上并发题目无Go版本:台湾同胞试水 — 交替打印FooBar
由于 LeetCode Concurrency (并发) 目前还没有 Go 语言版本,所以我打算逐渐把自己的解题思路写下,这是我试水温的第一篇。
6、多 Goroutine 的并发程序如何保证按序输出?channel 的使用是关键
来自 LeetCode 关于并发的又一道题目。
此程序的主要功能是将文件中数据导入到 clickhouse 数据库中。服务器内存每隔一段时间会耗尽:
logrus 貌似性能一般,追求性能,推荐 zerolog。
左神总是能产出高质量文章。
10、Go1.14 巨大的性能是怎么实现的?主要关注 time.Timer 和 内联 defer
Go1.14 核心的两个性能提升点。
11、golang 高并发模型
较详细的介绍并发模型。
文章翻译自罗伯·派克发表在Go Blog的文章,文章中为读者详述了Go语言中字符串与我们经常提起的字节、字符还有rune的关系和相互之间的不同。
13、Golang程序诊断
Go生态系统提供了一整套用于诊断Go程序中的逻辑和性能问题的API和工具。该篇文章总结了可用的工具,并帮助Go用户针对他们的特定问题选择合适的工具。
深挖一下 Go 的 struct。
开源项目
1、simdjson-go: Go 每秒解析千兆字节的 JSON
simdjson(C++ 的 JSON 库) 使用一种新颖的两阶段方法,可以在单个内核上实现每秒千兆字节 JSON 的解析性能,这是 Go 语言实现,性能比 simdjson 差些,但是号称是标准库的 10 倍。似乎接口不友好,不好用。这里有一篇介绍文章:https://blog.min.io/simdjson-go-parsing-gigabyes-of-json-per-second-in-go/
vim-go 的创建者提供的新工具,旨在用于 CI CD环境中,以检查无效的导入路径。
输出特别容易理解。
4、esbuild
极其快速的 JavaScript 捆绑和压缩程序。
IPFS(InterPlanetary File System)是用于组织分布式文件系统的对等协议和网络。
6、Broxy: Go 编写的 HTTP/HTTPS 拦截代理
此开源拦截代理仍处于 Alpha 状态。它使用 goproxy 作为核心代理实现,并且界面使用 Go 的 Qt 包装器实现。
对电子邮件,IP地址,名称或类似内容的“用户”数据结构,有吗?Faker 可以用逼真的,假的数据填充它们。
支持 UTF-8 和 IRCv3 特性。
9、grule
Go 实现的类 jboss drools 的规则引擎。
10、tailscale
网格 VPN,可让您随时随地轻松连接设备,不再需要配置防火墙端口。
11、cli
GitHub 官方命令行工具。
12、tamago
适用于 ARM SoC 的裸机 Go。
实现者是多个流行库的作者。该库的实现方式值得学习参考,面试中都可能让你实现一个 LRU Cache。
arcli 是 Redmine 的 CLI,它简化了一些操作,例如检查问题详细信息和跟踪时间。它支持 Redmine v3.3.1 +(已通过 v3.3.1 和 v4.1.0 测试)。
15、go-jsonc
将带注释的 json 转为无注释的。
16、pgcat
增强的 PostgreSQL 逻辑复制。
17、wg-gen-web
用于 WireGuard 的简单的基于 Web 的配置生成器。
大家可能知晓 viper,不一定知晓 fig。fig 将您的配置文件加载到结构中,并具有额外的支持,可将字段标记为必填项并设置默认值。可以对比下两者的使用。
19、twitterMon
基于控制台的 Twitter 客户端,用于显示 Twitter 列表中的 Tweet。Geeker 们可以试试。
20、agente
分布式简单而强大的发布管理和监视系统。
21、curlyq
Go 高效、可靠的后台任务处理库。
22、jin
一个快速、全面的 JSON 操作工具包。同时具有标准库和类似 tidwall/gjson 和 tidwall/sjson 的功能。
23、blocky
作为局域网的广告阻止程序的 DNS 代理。
资源&&工具
1、使用Go构建web服务系列文章(英文)
目前更新到第 7 部分。GCTT 会引进翻译。
2、Go调度器:使用轻量级并发实现一门语言 by Dmitry Vyukov
一个视频。
3、2020 重新学 Go 系列
这是一个培训机构出的,内容还挺全。
订阅
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。