Go语言爱好者周刊:第 23 期

2019年12月28日 299点热度 0人点赞 0条评论

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

这里记录每周值得分享的 Go 语言相关内容,周日发布。

本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2]

由于微信公众号不支持外链,文章链接可通过文末 「阅读原文」 查看。

鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。

图片

题图:这是 reddit 上发布者从女友那得到的圣诞礼物,是不是很可爱?!

刊首语

快过年了,又面临抢票这个难题。这不,GitHub 上这周趋势排行榜 1、2 位都是 12306 相关,不过都是 Python 的,没人用 Go 搞搞呢?

图片

你抢到回家的车票了吗?反正我是没抢到。

资讯

1、Prometheus 2.15.0 发布,Go 编写的服务监控系统[3]

Prometheus 2.15.0 发布了,Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。

2、Proxy-Go v8.8 发布,新增 iptables 透明转发支持,网关轻松实现全局透明代理[4]

1)sps 代理增加了当系统是 Linux 的时候,支持通过 iptables 透明转发过来的 tcp 连接请求。利用此功能实现路由器等网关设备为其它设备实现全局透明代理,详细教程可以参考项目主页 wiki 里面的《透明代理》。2)修复使用代理后,网易云音乐 UWP 应用无法正常使用的问题。3)修复了 http/sps 反向代理 https 不能工作的问题。4)优化了 http 代理,兼容一些旧的 http 客户端发送 http 代理请求时,使用不标准的 URL 情况。

3、golang 流式 http client gout v0.0.5 版本发布[5]

做 github 最好用的 http client 库,让你体会到还没有爽玩,活已经干玩。

4、jackal v0.8.0 发布,增加 context 支持[6]

用 Go 编写的 XMPP 服务器。

5、Proposal: Go2: Drying up Error Handling in Go[7]

我们仍在尝试可能的方法,以简化 Go 的未来版本中的错误处理。

6、Hugo v0.62.0 发布;圣诞节版本[8]

此版本带来 Markdown Render Hooks。

图片

文章

1、Go:我应该用指针替代结构体的副本吗?

对于许多 Go 开发者来说,考虑到性能,最佳实践是系统地使用指针而非结构体副本。我们将回顾两个用例,来理解使用指针而非结构体副本的影响。

2、大神是如何学习 Go 语言系列

1)大神是如何学习 Go 语言之浅谈 select 的实现原理

2)大神是如何学习 Go 语言之 panic 和 recover 的原理

3)大神是如何学习 Go 语言之浅入浅出接口的原理

4)大神是如何学习 Go 语言之写出优雅的 Go 代码

3、使用多年的 go pprof 检查内存泄漏的方法居然是错的?!

另一种使用方式可以了解一下。

4、别告诉我这是真的?goroutine 可能使程序变慢

我们将会展示一个关于 for 循环的代码,将输入分成几个序列添加到 Goroutines 里面!我敢打赌你之前可能有过几次这种情况,但是每次引入 gorountine 都让你的代码变得更快吗?

5、我是如何在大型代码库上使用 pprof 探索 Go 中的内存泄漏

我们知道 Go 拥有一个良好的社区和一个非常棒的工具集,所以我们选择了 Go。

6、100 行左右有效 Go 代码实现 tcp server & graceful shutdown

工作需要快速写了个tcpserver的框架,有效代码差不多 100 行左右,写篇文章分享下实现思路, 顺便解释一下如何实现类似网络服务的Graceful Shutdown功能。

7、利用 CPU cache 特性优化 Go 程序

cache line padding 适用于多个相邻的变量频繁被并发读写的场景。

8、图解 Go 里面的互斥锁 mutex 了解编程语言核心实现源码[9]

丰富的图讲解。

图片

9、Go 里面的读写锁与源码实现[10]

读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个 goroutine 可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的。

图片

10、GORM 之 ErrRecordNotFound 采坑记录[11]

在我印象中有个错误的认知:如果 GORM 没有找到 record,则会返回 ErrRecordNotFound 的错误,直到上次业务中出现了 bug,我才发现这个印象中的认知是错误的,且没有官方文档的支持。那么,ErrRecordNotFound 到底在什么时候返回呢,这篇文章将会根据源码来进行分析一下。

11、提升 Go 磁盘 IO 性能的尝试[12]

并发是个比较难理解的东西。Go 是谷歌创建的一门编程语言,它通过轻量级线程(协程)提供了容易理解的并发抽象。减轻了并发编程的难度。为了支持这些 Goroutine,Go 使用 runtime 将 Goroutine 多路复用到 OS 线程上,为了简化磁盘 IO,Go 保留了一组 IO 线程,用于阻塞 IO 以提升 CPU 的使用率。

图片

12、GOMAXPROCS 与容器的相处之道[13]

本文从 Docker 和 Kubernetes 对 CPU 资源的限制出发,利用实验的方式验证了这一问题,并且给出了一些个人看法。

13、谈谈 go.sum[14]

众所周知,Go 在做依赖管理时会创建两个文件,go.modgo.sum。相比于 go.mod,关于 go.sum 的资料明显少得多。自然,go.mod 的重要性不言而喻,这个文件几乎提供了依赖版本的全部信息。而 go.sum 看上去就是 go module 构建出来的天书,而不是什么人类可读的数据。

开源项目

1、evalfilter[15]

在 Go 应用嵌入小型脚本引擎。

2、age[16]

一个简单,安全和现代的加密工具。

3、chromedp[17]

驱动浏览器的 Go 语言库,支持 Chrome DevTools 协议。抓取动态网页利器。

4、sqlstats[18]

采集 sql.DBStats 并以 Prometheus 格式导出。

5、buf[19]

一种新的 Protobuf 处理库。

6、coca: 系统重构和系统分析工具箱[20]

Coca 是一个用于系统重构、系统迁移和系统分析的瑞士军刀。它可以分析代码中的 badsmell,行数统计,分析调用与依赖,进行 Git 分析,以及自动化重构等。

图片

7、eris: 处理跟踪和记录 Go 中的错误[21]

提供了一种更好的方式来处理,跟踪和记录 Go 中的错误。

8、go-term-markdown[22]

Go Markdown 终端渲染库。

9、trdsql[23]

可以在 CSV,LTSV,JSON 和 TBLN 上执行 SQL 查询的 CLI 工具。可以输出各种格式。

图片

资源&&工具

1、KubeCon North America 2019 视频列表[24]

国内似乎还没有类似的大会?

2、go-flutter[25]

基于 flutter 构建桌面应用。

图片

3、go time 播客 108 期[26]

Go 与图数据库。

4、以软件工程师的身份学习硬件编程[27](英文)

图片

硬件编程的人员应该很少吧。

图片

5、Go 常见错误[28]

官方 Wiki 总结的。

6、dockertags[29]

通过 CLI 获取容器 镜像、标签等信息。

7、为什么在此 fib 测试中 Go 如此之慢?[30]图片

Reddit 上有人解释:[31]

1)fib 函数根本不执行任何操作,因此基准测试实际上是在测量函数调用的开销;

2)而 Go 语言因为 goroutine 的机制,每个函数调用会多一些指令,同时在必要时会扩展堆栈,这是有开销的。

你怎么看?

8、Go 语言实现常用数据结构和算法[32]

对算法感兴趣,特别是大学生,建议学习学习。

订阅

这个周刊每周日发布,同步更新在Go 语言中文网[33]微信公众号[34]今日头条[35]

微信搜索"Go 语言中文网"或者扫描二维码,即可订阅。

图片

wechat

参考资料

[1]

polaris1119/golangweekly: https://github.com/polaris1119/golangweekly

[2]

提交 issue: https://github.com/polaris1119/golangweekly/issues

[3]

Prometheus 2.15.0 发布,Go 编写的服务监控系统: https://www.oschina.net/news/112335/prometheus-2-15-released

[4]

Proxy-Go v8.8 发布,新增 iptables 透明转发支持,网关轻松实现全局透明代理: https://www.oschina.net/news/112277/proxy-go-8-8-released

[5]

golang 流式 http client gout v0.0.5 版本发布: https://www.oschina.net/news/112272/gout-0-0-5-released

[6]

jackal v0.8.0 发布,增加 context 支持: https://github.com/ortuman/jackal/releases/tag/v0.8.0

[7]

Proposal: Go2: Drying up Error Handling in Go: https://github.com/golang/go/issues/36284

[8]

Hugo v0.62.0 发布;圣诞节版本: https://gohugo.io/news/0.62.0-relnotes/

[9]

图解Go里面的互斥锁mutex了解编程语言核心实现源码: http://www.sreguide.com/2019/12/23/go/sync_mutex/

[10]

Go里面的读写锁与源码实现: http://www.sreguide.com/2019/12/20/go/sync_reader_writer/

[11]

GORM之ErrRecordNotFound采坑记录: https://juejin.im/post/5dff33c7518825126131ce30

[12]

提升Go磁盘IO性能的尝试: https://sevenyu.top/2019/12/15/reducing-costs-of-disk-I/O-in-Go.html

[13]

GOMAXPROCS 与容器的相处之道: http://gaocegege.com/Blog/maxprocs-cpu

[14]

谈谈go.sum: https://segmentfault.com/a/1190000021425527

[15]

evalfilter: https://github.com/skx/evalfilter/

[16]

age: https://github.com/FiloSottile/age

[17]

chromedp: https://github.com/chromedp/chromedp

[18]

sqlstats: https://github.com/dlmiddlecote/sqlstats

[19]

buf: https://github.com/bufbuild/buf

[20]

coca: 系统重构和系统分析工具箱: https://github.com/phodal/coca

[21]

eris: 处理跟踪和记录 Go 中的错误: https://github.com/rotisserie/eris

[22]

go-term-markdown: https://github.com/MichaelMure/go-term-markdown

[23]

trdsql: https://github.com/noborus/trdsql

[24]

KubeCon North America 2019 视频列表: https://www.youtube.com/watch?v=F1w7P2H1gwY&list=PLBOtlFtGznBjuTVfzSZDoLLPbemn1CW7g

[25]

go-flutter: https://github.com/go-flutter-desktop/go-flutter

[26]

go time 播客 108 期: https://changelog.com/gotime/108

[27]

以软件工程师的身份学习硬件编程: https://blog.athrunen.dev/learning-hardware-programming-as-a-software-engineer/

[28]

Go 常见错误: https://github.com/golang/go/wiki/CommonMistakes

[29]

dockertags: https://github.com/goodwithtech/dockertags

[30]

为什么在此 fib 测试中 Go 如此之慢?: https://github.com/drujensen/fib

[31]

Reddit 上有人解释:: https://www.reddit.com/r/golang/comments/eegbrh/why_is_go_so_extremely_slow_in_this_fib_test/

[32]

Go 语言实现常用数据结构和算法: https://github.com/x899/algorithms

[33]

Go语言中文网: https://studygolang.com/go/weekly

[34]

微信公众号: https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91

[35]

今日头条: https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709

推荐阅读



喜欢本文的朋友,欢迎关注“Go语言中文网

图片

Go语言中文网启用信学习交流群,欢迎加微信274768166

11170Go语言爱好者周刊:第 23 期

root

这个人很懒,什么都没留下

文章评论