还有两个月就要过年了,想起来今年还有一大任务没有完成,就是掌握一门新的编程语言。所以呢,这两天阅读了大量 Golang 文档,看得我颈椎病都犯了。

我学习新技术的时候有个不好的习惯,就是除了新技术本身,还会第一时间找一堆与这个技术相关的信息,了解一下其主流应用,把今后可能用到的库啊开源项目啊都找出来。这就导致我在学习 Golang 的同时又跑去看了大量的开源库和 Golang 主流应用的资料。另一个不太好的习惯就是,我很有点选择困难综合症,总执着于在一堆技术里面选择出来一个自己看起来顺眼的,相对主流,用起来不错,源码足够优雅的那个。这也就直接导致我足不出户的这两天阅读量巨大,眼都快瞎了。除了选择起来很痛苦,寻找佐证和写垃圾代码测试的过程也是难以描述啊……

好处就是,似乎又找到了一点点十几年前忘情怼代码的感觉。

扯远了……

记录一下这些资料,方便后面深入学习的时候查找。

Golang 的入门资料

我的学习路线:

  1. 花 8 小时读完《Go 入门指南》,看心情做一下书中练习。
  2. 快速跑一遍”Go 指南“中的例子,大约 1 小时。
  3. 挑《使用 Golang 构建 web 应用程序》中感兴趣的章节浏览一遍。

Golang Web 框架

我使用 Golang 的第一个目标是逐渐替换 SAGITEAM 正在广泛使用的 API 服务框架(uwsgi+Python)。因此我的第一站就是 Golang 的 Web 框架。

得益于 Golang 自带的 http 包的完善度,Golang 的 Web 框架可是百花齐放。我仔细比较了大约十几个 Web 框架,根据我的标准(小巧、灵活、优雅、性能、成长),在两个框架里面纠结了好一阵子:

最终我选择了 Gin。至于原因么…… 可能是因为名字短一点?

顺便说一句,之前在选择 Python Web 框架的时候我也很纠结:Python web框架的选择

项目结构

项目结构的 best practice 可以参考下面两个资源:

需要注意的是从 Go 1.11 开始,已经可以把项目放在 GOPATH 之外了,我就准备这么做。

这里还有一篇 Restfull Projects API with Gin 可以参考。我就是准备专门用 Golang 来写 API。

API Gateway

Golang 在 API Gateway 这个领域里面也有不少实践,我顺便研究了一下。Kong 是目前应用较多的实现,个人也比较倾向于使用它。

全文完