这里记录每周值得分享的 Go 语言相关内容,周日发布。
本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
题图:Go 1.16 发布说明草案,文档大部分已经完成,具体参见:https://tip.golang.org/doc/go1.16
刊首语
一道考察你能否看懂的题目。
var x int
inc := func() int {
x++
return x
}
fmt.Println(func() (a, b int) {
return inc(), inc()
}())
以上代码输出什么:
A:1 1;B:1 2;C:2 2;D:不确定
资讯
苹果的 M1 芯片带来了更多的乐趣,这次运行的是 Hugo 的一系列基准测试,该测试显示了一个芯片明显胜过另一个芯片。
这是一个流行的开源活动,有 Go 相关的,有兴趣的可以了解下。
改动比较多,其中被大家传的最多的就是 Docker 不是默认的容器运行时。
本文档介绍了 Docker Engine 的最新更改,新增功能,已知问题和修复。
文章
学习不错的网站。
十亿美元(billion dollar)的错误 / bug 貌似是美国的一个梗,大概的意思是,对于那些市值上几千亿的大企业,如果一个错误能够导致市值下跌个百分之零点几,就已经是十亿左右了。
将 Goroutine 从一个 OS 线程切换到另一个线程需要一定开销,并且,如果这种操作过于频繁的话会降低应用性能。
寻求贡献者一起维护。
深入分析 mutex 与 cas 的底层实现。
Go channel 中的实现中使用了 mutex,这个 mutex 和标准库中的 Mutex 有什么不同。
本文通过分析一个父进程没有 wait 子进程的问题,了解到了进程 reaper 机制,并进一步了解到它在 container 这种特殊系统环境下的存在意义。
性能问题可以分为两种类型:On-CPU 和 Off-CPU。
9、聊聊 Golang 的 zap 的 WriteSyncer
本文研究 zap 的 WriteSyncer。
这篇文章的初衷是想解答知乎上的一位知友提出的问题。
使用四种不同的方式来介绍如何观察 GC。
开源项目
1、gosnmp
一个 SNMP(Simple Network Management Protocol)库。SNMP 是一种协议,用于管理或监视有关 IP 网络上的设备(例如路由器,服务器,打印机)的数据。 gosnmp 可让您用 Go 查询和设置数据。
2、gnomock
使用临时 Docker 容器进行无障碍测试。
3、phpgrep
为 PHP 代码准备的。
4、gocrest
类似 Hamcrest 的匹配器,GoCrest 匹配器是可组合的,自我描述的,可以以更易读的形式串在一起以创建灵活的断言。
5、kanzi-go
Go 实现的无损压缩库。
6、gaio
Go 语言高性能网络通信框架。
微众银行开源的 Go 实现的一站式云原生机器学习平台。
8、sariaf
一个快速,简单,轻巧的 HTTP 路由器,代码一共才 200+ 行。
9、cel-spec
Google 开源的通用表达式语言(cel)。
10、hashfs
实现 Go 1.16 的 io/fs.FS,将 SHA256 哈希附加到文件名中,以实现主动 HTTP 缓存。
11、arpc
支持更有效的网络通信。作者投稿,有一篇文章介绍。
资源&&工具
1、jsondiff
基于 RFC6902 的 Go JSON diff 库。
Omniparser 是本地的 Golang ETL 解析器,它以流方式提取各种格式(CSV, txt, fixed length/width, XML, EDI/X12/EDIFACT, JSON 和自定义格式)的输入数据,并将数据转换为基于用 JSON 编写的模式。以下是在线的 Demo 示例:https://omniparser.herokuapp.com/。
Lunar Lander 是 1979 年的 Atari 游戏,玩家必须在特定位置放置太空飞船。这是用 Go 语言编写的基于终端的版本,你也可以直接将 ssh 定向到正在运行的实例(使用 sshtargate)。
4、nerdctl
与 docker 兼容的 containerd 客户端工具。
快速,简单的 Go + Docker 开发。
6、lens
k8s IDE 发布了 v4.0 版本。
7、sops
Mozilla 开源的 Go 实现的管理敏感数据的工具。
Mastering Go。有中文版。
9、IDE
Go 打造的在浏览器中使用的 Go IDE。
10、filecrypt
使用 Go 编写的超级易用的文件加密实用程序。
订阅
微信搜索"Go语言中文网"或者扫描二维码,即可订阅。
有疑问加站长微信联系(非本文作者)

答案B
哇,我一直以为是2,2,是因为return的原因吗?
方法调用 局部变量累计
捕获变量,x逃离到堆上了