50 万行 Go 代码!可汗学院抛弃 Python 转向 Go
2019 年 12 月,著名教育性非营利组织可汗学院宣布了一项将后端重新设计为一系列 Go 服务的工程——Goliath,将后端最初使用的 Python 2 语言转换为 Go 语言。近日可汗学院透露,目前已完成超过 50 万行 Go 代码。
据介绍,在 Goliath 项目刚启动时,除了团队运行的验证 Go 语言是更好选择的实验以外,团队中没有人了解 Go 语言。而现在,可汗学院所有的后端和全栈工程师都使用 Go 语言,目前已有超过 50 万行 Go 代码在生产环境中运行。
为什么会从 Python 转向 Go 呢?可汗学院首席软件架构师 Kevin Dangoor 进行了分析。
Python 2 到达 EOL 阶段
2018 年,Python 团队宣布 Python 2.7 的 EOL(停用)日期为 2020 年 1 月 1 日,接下来,将不会有任何更新,也不会再有源码安全补丁。这意味着使用 Python 2 的项目面临着迁移。
对于使用 Python 2 作为后端服务器语言的可汗学院,如何迁移、选择何种语言成为当务之急。
他们认为从 Python 2 迁移到 Python 3 并非易事,于是在 Kotlin、Go 等语言中进行选择,并最终选择了 Go。原因如下:
Go 提供了简洁性和一致性,Go 团队致力于开发一种帮助团队长期可靠地发布软件的语言; Go 的编译速度惊人,可以帮助团队实现更快速的迭代; 与 Kotlin 相比,Go 得到了更广泛的编辑器的支持; Go 和 Kotlin(在 JVM 上)的性能相似,但 Go 使用的内存少得多,这意味着它可以缩减为更小的实例。
那么,在使用 Go 语言后,开发团队接受度如何呢?
工程师喜欢 Go 语言
可汗学院的工程师认为 Go 语言具备「易于读写」等优秀特性。此外,Go 语言在错误处理、标准库文档、编译器、工具链、性能、处理速度等多个方面受到好评,甚至其地鼠吉祥物也赢得了一片赞誉。
不过,可汗学院团队也表达了对泛型的需求。他们认为在编写内部库代码或处理 slice 时尤其需要泛型。缺乏泛型是人们对 Go 语言的最大抱怨。
目前,可汗学院已完成 50 万余行 Go 代码。Kevin Dangoor 表示,虽然 Go 语言整体上比 Python 冗长,但它速度快、工具好用、在生产环境中运行良好。
参考链接:
https://blog.khanacademy.org/half-a-million-lines-of-go/
https://blog.khanacademy.org/go-services-one-goliath-project/