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

polaris · · 3799 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

这里记录每周值得分享的 Go 语言相关内容,周日发布。 本周刊开源(GitHub:[polaris1119/golangweekly](https://github.com/polaris1119/golangweekly)),欢迎投稿,推荐或自荐文章/软件/资源等,请[提交 issue](https://github.com/polaris1119/golangweekly/issues) 。 鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/cover.jpg "reddit 上发布者从女友那得到的圣诞礼物") 题图:这是 reddit 上发布者从女友那得到的圣诞礼物,是不是很可爱?! ## 刊首语 快过年了,又面临抢票这个难题。这不,GitHub 上这周趋势排行榜 1、2 位都是 12306 相关,不过都是 Python 的,没人用 Go 搞搞呢? ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/12306.jpg) 你抢到回家的车票了吗?反正我是没抢到。 ## 资讯 1、[Prometheus 2.15.0 发布,Go 编写的服务监控系统](https://www.oschina.net/news/112335/prometheus-2-15-released) Prometheus 2.15.0 发布了,Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。 2、[Proxy-Go v8.8 发布,新增 iptables 透明转发支持,网关轻松实现全局透明代理](https://www.oschina.net/news/112277/proxy-go-8-8-released) 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 版本发布](https://www.oschina.net/news/112272/gout-0-0-5-released) 做 github 最好用的 http client 库,让你体会到还没有爽玩,活已经干玩。 4、[jackal v0.8.0 发布,增加 context 支持](https://github.com/ortuman/jackal/releases/tag/v0.8.0) 用 Go 编写的 XMPP 服务器。 5、[Proposal: Go2: Drying up Error Handling in Go](https://github.com/golang/go/issues/36284) 我们仍在尝试可能的方法,以简化 Go 的未来版本中的错误处理。 6、[Hugo v0.62.0 发布;圣诞节版本](https://gohugo.io/news/0.62.0-relnotes/) 此版本带来 Markdown Render Hooks。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/hugo.png) ## 文章 1、[Go:我应该用指针替代结构体的副本吗?](https://mp.weixin.qq.com/s/11wxINd_RA40YD0bL2Zbqg) 对于许多 Go 开发者来说,考虑到性能,最佳实践是系统地使用指针而非结构体副本。我们将回顾两个用例,来理解使用指针而非结构体副本的影响。 2、[大神是如何学习 Go 语言系列](https://mp.weixin.qq.com/s/9-eLJqYZrOpNLoiTGpBrKA) 1)[大神是如何学习 Go 语言之浅谈 select 的实现原理](https://mp.weixin.qq.com/s/9-eLJqYZrOpNLoiTGpBrKA) 2)[大神是如何学习 Go 语言之 panic 和 recover 的原理](https://mp.weixin.qq.com/s/iRdKLWt0FTHoQyOQSwtHYg) 3)[大神是如何学习 Go 语言之浅入浅出接口的原理](https://mp.weixin.qq.com/s/62F6bd4UXiqWC8f8i7GBGQ) 4)[大神是如何学习 Go 语言之写出优雅的 Go 代码](https://mp.weixin.qq.com/s/g412oBwHXO_B5Axncn34Aw) 3、[使用多年的 go pprof 检查内存泄漏的方法居然是错的?!](https://mp.weixin.qq.com/s/qC5iZ2gq_0EvSmnKCwB9og) 另一种使用方式可以了解一下。 4、[别告诉我这是真的?goroutine 可能使程序变慢](https://mp.weixin.qq.com/s/PkuspIWKQpL7awtpCg-rOA) 我们将会展示一个关于 for 循环的代码,将输入分成几个序列添加到 Goroutines 里面!我敢打赌你之前可能有过几次这种情况,但是每次引入 gorountine 都让你的代码变得更快吗? 5、[我是如何在大型代码库上使用 pprof 探索 Go 中的内存泄漏](https://mp.weixin.qq.com/s/2VI8xO7v3JKq2D071bgqfw) 我们知道 Go 拥有一个良好的社区和一个非常棒的工具集,所以我们选择了 Go。 6、[100 行左右有效 Go 代码实现 tcp server & graceful shutdown](https://mp.weixin.qq.com/s/P8xh9FQNKQevGWuejVr83w) 工作需要快速写了个`tcpserver`的框架,有效代码差不多 100 行左右,写篇文章分享下实现思路, 顺便解释一下如何实现类似网络服务的`Graceful Shutdown`功能。 7、[利用 CPU cache 特性优化 Go 程序](https://mp.weixin.qq.com/s/kMlB5RbEUucNp_IiRhryBw) cache line padding 适用于多个相邻的变量频繁被并发读写的场景。 8、[图解Go里面的互斥锁mutex了解编程语言核心实现源码](http://www.sreguide.com/2019/12/23/go/sync_mutex/) 丰富的图讲解。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/sync_mutex.png) 9、[Go里面的读写锁与源码实现](http://www.sreguide.com/2019/12/20/go/sync_reader_writer/) 读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/sync_reader_writer.png) 10、[GORM之ErrRecordNotFound采坑记录](https://juejin.im/post/5dff33c7518825126131ce30) 在我印象中有个错误的认知:如果 GORM 没有找到 record,则会返回ErrRecordNotFound 的错误,直到上次业务中出现了bug,我才发现这个印象中的认知是错误的,且没有官方文档的支持。那么,ErrRecordNotFound 到底在什么时候返回呢,这篇文章将会根据源码来进行分析一下。 11、[提升Go磁盘IO性能的尝试](https://sevenyu.top/2019/12/15/reducing-costs-of-disk-I/O-in-Go.html) 并发是个比较难理解的东西。Go是谷歌创建的一门编程语言,它通过轻量级线程(协程)提供了容易理解的并发抽象。减轻了并发编程的难度。为了支持这些Goroutine,Go使用runtime将Goroutine多路复用到OS线程上,为了简化磁盘IO,Go保留了一组IO线程,用于阻塞IO以提升CPU的使用率。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/reducing-costs-of-disk-IO-in-go.png) 12、[GOMAXPROCS 与容器的相处之道](http://gaocegege.com/Blog/maxprocs-cpu) 本文从 Docker 和 Kubernetes 对 CPU 资源的限制出发,利用实验的方式验证了这一问题,并且给出了一些个人看法。 13、[谈谈go.sum](https://segmentfault.com/a/1190000021425527) 众所周知,Go 在做依赖管理时会创建两个文件,`go.mod` 和 `go.sum`。相比于 `go.mod`,关于 `go.sum` 的资料明显少得多。自然,`go.mod` 的重要性不言而喻,这个文件几乎提供了依赖版本的全部信息。而 `go.sum` 看上去就是 go module 构建出来的天书,而不是什么人类可读的数据。 ## 开源项目 1、[evalfilter](https://github.com/skx/evalfilter/) 在 Go 应用嵌入小型脚本引擎。 2、[age](https://github.com/FiloSottile/age) 一个简单,安全和现代的加密工具。 3、[chromedp](https://github.com/chromedp/chromedp) 驱动浏览器的 Go 语言库,支持 Chrome DevTools 协议。抓取动态网页利器。 4、[sqlstats](https://github.com/dlmiddlecote/sqlstats) 采集 sql.DBStats 并以 Prometheus 格式导出。 5、[buf](https://github.com/bufbuild/buf) 一种新的 Protobuf 处理库。 6、[coca: 系统重构和系统分析工具箱](https://github.com/phodal/coca) Coca 是一个用于系统重构、系统迁移和系统分析的瑞士军刀。它可以分析代码中的 badsmell,行数统计,分析调用与依赖,进行 Git 分析,以及自动化重构等。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/coca.png) 7、[eris: 处理跟踪和记录 Go 中的错误](https://github.com/rotisserie/eris) 提供了一种更好的方式来处理,跟踪和记录 Go 中的错误。 8、[go-term-markdown](https://github.com/MichaelMure/go-term-markdown) Go Markdown 终端渲染库。 9、[trdsql](https://github.com/noborus/trdsql) 可以在 CSV,LTSV,JSON 和 TBLN 上执行 SQL 查询的 CLI 工具。可以输出各种格式。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/trdsql.gif) ## 资源&&工具 1、[KubeCon North America 2019 视频列表](https://www.youtube.com/watch?v=F1w7P2H1gwY&list=PLBOtlFtGznBjuTVfzSZDoLLPbemn1CW7g) 国内似乎还没有类似的大会? 2、[go-flutter](https://github.com/go-flutter-desktop/go-flutter) 基于 flutter 构建桌面应用。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/flutter.jpg) 3、[go time 播客 108 期](https://changelog.com/gotime/108) Go 与图数据库。 4、[以软件工程师的身份学习硬件编程](https://blog.athrunen.dev/learning-hardware-programming-as-a-software-engineer/)(英文) ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/software-engineer.jpeg) 硬件编程的人员应该很少吧。 ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/ESP32-Pinout-1.png) 5、[Go 常见错误](https://github.com/golang/go/wiki/CommonMistakes) 官方 Wiki 总结的。 6、[dockertags](https://github.com/goodwithtech/dockertags) 通过 CLI 获取容器 镜像、标签等信息。 7、[为什么在此 fib 测试中 Go 如此之慢?](https://github.com/drujensen/fib) ![](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/issue023/fib.png) [Reddit 上有人解释:](https://www.reddit.com/r/golang/comments/eegbrh/why_is_go_so_extremely_slow_in_this_fib_test/) 1)fib 函数根本不执行任何操作,因此基准测试实际上是在测量函数调用的开销; 2)而 Go 语言因为 goroutine 的机制,每个函数调用会多一些指令,同时在必要时会扩展堆栈,这是有开销的。 你怎么看? 8、[Go 语言实现常用数据结构和算法](https://github.com/x899/algorithms) 对算法感兴趣,特别是大学生,建议学习学习。 ## 订阅 这个周刊每周日发布,同步更新在[Go语言中文网](https://studygolang.com/go/weekly)、[微信公众号](https://weixin.sogou.com/weixin?query=Go%E8%AF%AD%E8%A8%80%E4%B8%AD%E6%96%87%E7%BD%91) 和 [今日头条](https://www.toutiao.com/c/user/59903081459/#mid=1586087918877709)。 微信搜索"Go语言中文网"或者扫描二维码,即可订阅。 ![wechat](https://raw.githubusercontent.com/polaris1119/golangweekly/master/docs/imgs/wechat.png)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3799 次点击  ∙  1 赞  
加入收藏 微博
2 回复  |  直到 2019-12-31 22:28:50
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传