几个月后,我有机会参与了他工作的一个运营自动化项目。我们用 Go 语言建立了几个 API,并用一些 AWS 工具(如用 Go 语言编写的 AWS Lambda)在它们之间进行通信。这个项目很成功,最大的公司决定收购这个项目。
之后,我继续在我工作的下一家(当前)公司中使用 Go,构建了一个真正的微服务环境,以 Go 作为后端的主要语言,取代了 Typescript 整体。
为什么我们选择Go?让我尝试列举一些促使我们选择 Go 而非其他编程语言的因素。
明确明显
Go 代码非常明显,有人开玩笑说它是一种无聊的代码,这真是妙极了。
Go 是一种非常快的语言。因为 Go 是编译语言,所以它的性能自然要优于解释型语言或虚拟运行时语言。编译速度极快,生成的二进制文件也非常小。这样,您就可以每天部署数次,完全符合 DevOps 方法论。
Go 的语法小而强大,因此很容易学习。你可以把大部分语法记在脑子里,这意味着你不需要花很多时间去查找。它还非常简洁易读。非 Go 程序员,尤其是习惯了 C 风格语法的程序员,在阅读 Go 程序时通常都能理解其中的含义。
Go 是一种强静态类型语言。它有 int、字节和字符串等基元类型。还有结构struct体。与其他强类型语言一样,类型系统允许编译器帮助捕捉整类错误。Go 还内置了列表和映射类型,使用起来非常方便。
Go 拥有接口,任何结构体都可以通过实现接口的方法来满足接口的要求。Go 还拥有一流的函数,这为以更函数化的风格编写代码提供了可能。
Go 有一个很好的标准库,因此 Go 程序通常很少有外部依赖。它为处理原始类型提供了方便的内置函数。一些软件包可以轻松设置网络服务器、处理 I/O 和数据操作。标准库提供的 JSON 序列化和反序列化非常简单。
Go 使得并发性比其他语言更容易。使用 goroutine(s) 和 channel(s) 几乎是小菜一碟,而更复杂的模式也是可能的。
Go 在其标准库中提供了开箱即用的测试支持。不需要额外的依赖。如果你有一个名为 thing.go 的文件,在另一个名为 thing_test.go 的文件中编写你的测试,然后运行 "go test"。Go 会自动执行这些测试。
Go 静态分析工具种类繁多,功能强大。其中特别值得一提的是 gofmt,它可以根据 Go 建议的风格格式化你的代码。由于有了单一的代码格式和强大的标准库,您可以专注于创造业务价值,而不是讨论在哪里放置这个条件或如何定义那个数据结构。
Go 提供了一个内存安全的动态对象分配和垃圾回收系统,这一切都比 C 和 C++ 更简单。此外,由于不允许使用指针运算,因此使用指针更加安全。它还提供了使用值类型的选项。
Go 的编码风格遵循视线:其理念是,沿着函数的边缘向下,应该是最理想的路径,因此它位于左边缘。其他任何错误或边缘情况都不应该出现在正确的路径上,所以应该缩进。这样,代码就变得超级易读和易懂,而且在 99% 的情况下都不需要使用其他代码。
当你看到 Go 代码中有一部分代码缩进了,你就知道那是函数的出口,而快乐路径就在它的左边缘。
简单、干净、伟大,GO!