【译文】面试时,有人问我喜欢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

余下全文(1/3)
分享这篇文章:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注