0

【译文】面试时,有人问我喜欢Go语言什么?

 6 months ago
source link: https://www.techug.com/post/what-i-like-about-go/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

“告诉我你喜欢 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

O1CN013bCLqL1OQdsgcvnJK_!!2768491700.jpg_640x640q80_.webp

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK