【译文】面试时,有人问我喜欢Go语言什么?
“告诉我你喜欢 Go 语言什么?”
几周前,有人问我喜欢 Go 语言的哪一点。那是在一次求职面试中,当时我意识到,尽管我几乎在每个项目中都使用 Go 语言,但我并没有认真考虑过这个问题。
经过一番思考,我决定把它写下来。
我从两个角度分享我的经验:
- 操作视角:部署和管理 Go 编译的程序。(也许这是我最重要的方面)
- 开发者视角:关于 Go 语言本身、工具和生态系统。
操作视角
性能。就我的目的和我编写的服务类型而言,Go 语言的性能绰绰有余,它允许我在小型廉价实例和有限的无服务器运行时(如 AWS Lambda 函数和 Scaleway Serverless Jobs)上运行 Go 程序。对于无服务器执行来说,良好的性能非常重要,因为我是按执行时间收费的。
好吧,也许 Go 的效率比不上 Rust 或 C++,但我是 Python 背景出身,Go 的速度在我看来简直是天方夜谭。
交叉编译轻而易举。在具有多种架构的异构环境中轻松部署是最重要的。我编写的服务可以在云计算(无服务器或 IaaS)、裸机服务器、笔记本电脑甚至 Raspberry Pi 4 上运行。
随着 Arm64 服务器的出现(将来可能还有 RISC-V 64?),我需要在我的机器和 CI 上进行交叉编译,而不会出现混乱。
静态二进制文件和容器化。如前所述,我的一些项目在异构环境中运行。因此,容器化自然是打包和部署我的服务的首选方法。将 Go 程序容器化非常容易,而且由于 Go 的编译速度很快,多阶段镜像构建也非常快。有了静态 Go 二进制文件,我就可以为容器选择非常轻量级的基础镜像,比如 Alpine Linux,而不必担心 libc 依赖性。我的映像通常只有几兆字节。
启动时间。当我使用 Kubernetes 或 AWS ECS 等编排器工作时,我需要容器快速启动,这样推出新版本或扩展所需的时间就更短,这总是件好事。至于根据执行时间收费的无服务器服务,较短的启动时间也意味着省钱。
开发者的视角
低级与高级之间的最佳平衡点。在学习 Go 之前,我学习了很多 Python(现在仍在使用),它被认为是一种高级语言。相比之下,Go 是一种相当低级的编程语言,但肯定也不像 C 语言那么低级。我喜欢 Go 的这种平衡。它不会太低级,所以我可以忽略无关紧要的细节,但当我需要使用一些低级基元(如原子指令)或想要更精细地控制结构布局时,它又不会太高级。
类型系统。这一点非常主观。我喜欢静态类型,因为我犯了很多明显的愚蠢错误,而这些错误在编译时很容易被发现。Go 也有结构类型,在我看来比名义类型更直观。
符合人体工程学的并发编程。这并不意味着有了 Go,并发编程就变得容易了。无论如何,并发编程都很难。但是,由于有了 goroutines(无需 “彩色函数”)和(有时)通道,Go 使得并发编程的编写变得更加轻松。
标准化工具。与同代现代语言一样,Go 提供了标准工具来管理软件包、运行测试、构建应用程序、格式化代码,甚至对代码进行微基准测试。
没有自作聪明的代码。Go 语言大多只有简单明了的结构。这增加了代码 golfing 的难度,但我认为这是好事。
本文文字及图片出自 What I like about Go
你也许感兴趣的:
- Go语言有个“好爹”反而被程序员讨厌?
- 【外评】为什么人们对 Go 1.23 的迭代器设计感到愤怒?
- 【译文】Go语言性能从 1.0 版到 1.22 版
- Go 语言程序员的进化
- 4 秒处理 10 亿行数据! Go 语言的 9 大代码方案,一个比一个快
- 【译文】Go语言设计:我们做对了什么,做错了什么
- 最好的 Go 框架就是不用框架?
- 吵翻了!到底该选 Rust 还是 Go,成 2023 年最大技术分歧
- “Go 语言的优点、缺点和平淡无奇之处”的十年
- 为什么不用Go开发操作系统?
你对本文的反应是: