Go语言爱好者周刊:第 4 期
这里记录每周值得分享的 Go 语言相关内容,周日发布。
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue 。
鉴于大部分人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。
(题图:北京 望京 SOHO)
Go 语言中文网希望给大家分享更多优质内容。无论是官网,还是其他渠道,包括 2017 年底成立的 GCTT。现在我们又开通了 技术头条 团队号,如果你是 Go 语言爱好者,愿意分享更多 Go 相关技术,欢迎加入我们的团队号,一起分享 Go 语言的精彩给更多人。以下是我们团队号的信息:
资讯
1、Go 1.12.8 和 Go 1.11.13 发布:解决安全问题
这次小版本升级主要解决安全问题,令人尴尬的是,几天时间,又发布了 Go 1.12.9,解决 linker、os 和 math/big 包的问题。
2、Caddy 默认自动支持 HTTPS,使用的 Let's Encrypt 发布中文版了
Let’s Encrypt 对 HTTPS 的推动贡献当真不小。
3、MongoDB Go Driver 1.1: MongoDB 的 Go 语言官方驱动发布 1.1 版本
很长一段时间,MongoDB 的 Go 语言驱动一直使用的 mgo 这个,但由于作者工作中不再使用 MongoDB,出于精力等方面的考虑,该项目不再维护。而且我们有了官方出品的驱动,自然应该使用它了。
1.1 版本的驱动,支持本周刚发布的 MongoDB 4.2!
Go 语言实现的快速静态站点生成器。Hugo 0.57 带来级联前端,字母排序,资源加载资产和通配符等特性。
一些 Bug 的修复。
快速的、跨平台 HTTP/2 Web 服务器。
这是 gRPC 的 Go 语言实现。
8、Gophercon UK 2019 将于 8 月 22 日 - 23 日在伦敦举行
Go 的大会全球各个国家轮流举行~
问答
1、小白从java转go,c语言掌握不深,有没有大佬可以给一些建议怎么样学习go
该问答的回复值得一读。
2、golang中如何将redis取出的map[string]string数据解析到目标struct中?
波罗学的回答。其实本期刚好推荐了一个库:mapstructure,用于处理类似这样的问题。
你觉得怎么样比较优雅?
4、golang什么时候该返回error,什么时候panic?
你是怎么处理这个问题的?
文章
文中列出了几轮面试的题目,大家可以带着题目学习。
Go 语言以并发作为其特性之一,并发必然会带来对于资源的竞争,这时候我们就需要使用 Go 提供的sync.Mutex
这把互斥锁来保证临界资源的访问互斥。既然经常会用这把锁,那么了解一下其内部实现,就能了解这把锁适用什么场景,特性如何了。
作者记录了在 Go 开发中遇到的十大常见错误。顺序无关紧要。
4、Golang 源码探索 编译和调试源码、协程的实现原理、GC的实现原理
Go 可以说是近几年最热门的新兴语言之一了,一般人看到分布式和大数据就会想到Go,这个系列的文章会通过研究 Go 的源代码来分析内部的实现原理,golang的源代码已经被很多人研究过了,我将会着重研究他们未提到过的部分。
Go 的 GC 自打出生的时候就开始被人诟病,但是在引入v1.5的三色标记和v1.8的混合写屏障后,正常的GC已经缩短到10us左右,已经变得非常优秀,了不起了。
Go GC 算法真的比 Java 领先吗?这篇文章可以一起读读。
6、Go Http包解析:为什么需要response.Body.Close()
最近线上的一个项目遇到了内存泄露的问题,查了heap之后,发现 http包的 dialConn函数竟然占了内存使用的大头,这个有点懵逼了,后面在网上查询资料的时候无意间发现一句话:
10次内存泄露,有9次是goroutine泄露。
结果发现,正是我认为的不可能的goroutine泄露导致了这次的内存泄露,而goroutine泄露的原因就是 没有调用 response.Body.Close()
。
本文一步步分析问题,希望对将来遇到问题时能有较好地启发作用。记一次golang程序CPU高的排查过程 记录了最终的采取的解决办法。
8、借Go语言database/sql包谈数据库驱动和连接池设计
连接池是很见的。本文通过 database/sql 包来讲解连接池的设计。
9、Goroutine和Channel的的使用和一些坑以及案例分析
简单聊一下并发模型,下一篇会单独全篇聊聊多种并发模型,以及其演进过程。
10、GCTT 出品 | 仔细研究 Go(golang) 类型系统
本文通过示例详解 Go 的类型系统。
开源项目
BFE 是百度开源的,很低调。支持多种协议,包括HTTP,HTTPS,SPDY,HTTP2,WebSocket,TLS 等。
2、fresh:保存/创建/删除源文件后自动构建和启动 Web 应用程序(star:2200+)
在用 Go 进行 Web 开发时,修改完后,每次都要手动编译、运行,一定程度上不方便,fresh 用于解决这个问题。
Vegeta 是一个多功能的 HTTP 负载测试工具,会以恒定的请求率来测试 HTTP 服务。它既可以用作命令行实用程序,也可以用作库。
可以通过它得到一些漂亮的图表:
挺有意思的东西,分配内存时会发出声音。
5、Cordless:Go 语言实现的强大的 Discord 终端客户端
一个非常整洁的自定义 Discord 聊天客户端,面向高级用户,或者说 Geek 用户。它会占用更少的计算机资源。
错误处理一直是 Go 社区争论最多的特性之一,这个错误处理库有兴趣可以了解了解,同时另外一个 star 更多的错误处理库:errors,可以对比学习下。
Pigo 是基于像素强度比较的物体检测纸张的纯 Go 脸部检测库,对人脸识别有兴趣的可以研究下。
8、Crawlab:基于 Golang 的分布式爬虫管理平台
支持 Python、NodeJS、Go、Java、PHP 等多种编程语言以及多种爬虫框架。
包gofpdf实现了一个PDF文档生成器,它具有对文本,绘图和图像的高级支持。
10、mapstructure:通用的将 map 解析到 Go 结构的库
资源&&工具
1、在 IDE 中满足刷 LeetCode 的需求,支持 leetcode.com与leetcode-cn.com
喜欢刷 LeetCode 的,可以考虑试试,对刷题应该挺有帮助!
2、玩游戏的方式学习 Git:Learning Git Branching
Git 是目前最流行的版本控制系统, “Learning Git Branching” 可以说是目前为止最好的教程了,在沙盒里你能执行相应的命令,还能看到每个命令的执行情况; 通过一系列刺激的关卡挑战,逐步深入的学习 Git 的强大功能,在这个过程中你可能还会发现一些有意思的事情。
这里有一篇介绍的文章:https://studygolang.com/topics/9860
3、各大技术领域面试资料列表(Awesome-Interview)
包含前端、客户端、算法、语言和面试经验等各方面。
方便的去掉 go.mod 中不再使用的包(依赖)。
5、UPX:the Ultimate Packer for eXecutables,减小程序的大小
总有人嫌弃 Go 语言写的程序“大”,如果你这么认为,可以试试 UPX 这个工具,它虽然不是为 Go 程序写的,但可以很好的支持 Go 语言程序(UPX 本身是 C/C++ 实现的)。
6、免费的 Go 语言图书:Learning Go(英文)
这里有中译本:https://mikespook.com/learning-go/ ,这本书属于最早期的 Go 语言图书之一了,但示例代码一直保持着更新。
这个免费的课程将帮助您锻炼您的 Go 技能,同时构建一些很酷的应用程序、工具和包。
终极 Go 学习指南,包含大量文档化的代码和程序分析。
订阅
这个周刊每周日发布,同步更新在Go语言中文网、微信公众号 和 今日头条。
微信搜索”Go语言中文网"或者扫描二维码,即可订阅。