Go语言的适用方向 | 青训营

134 阅读6分钟

Go 语言最适合的地方

没有一种语言适合所有工作,但有些语言比其他语言适合更多的工作。

Go 在开发以下应用程序类型方面表现最出色。

一、云原生开发

Go 的并发性和网络功能以及高度的可移植性使其非常适合构建云原生应用程序。事实上,Go 被用来构建云原生计算的几个基石,包括Docker、Kubernetes和Istio。

二、分布式网络服务

网络应用程序的生存和消亡取决于并发性,而 Go 的原生并发特性(主要是goroutine 和 通道)非常适合此类工作。因此,许多 Go 项目都是用于网络、分布式功能和云服务: API、 Web 服务器、 Web 应用程序的最小框架等。

三、实用程序和独立工具

Go 程序编译为具有最少外部依赖的二进制文件。这使得它们非常适合创建实用程序和其他工具,因为它们启动速度快并且可以轻松打包以进行重新分发。一个例子是 名为 Teleport 的访问服务器(用于 SSH 等)。通过从源代码编译或下载预构建的二进制文件,Teleport 可以快速轻松地部署在服务器上。

四、Go语言限制

Go 的一系列固执己见的功能既引起了赞扬,也引起了批评。Go 的设计偏向于小而易于理解,故意省略了某些功能。结果是其他语言中常见的一些功能在 Go 中根本不可用——这是故意的。

一个长期存在的抱怨是缺乏通用函数,通用函数允许函数接受许多不同类型的变量。多年来,Go 的开发团队一直反对在该语言中添加泛型,因为他们想要一种语法和一组行为来补充 Go 的其余部分。但从 2022 年初发布的 Go 1.18 开始,该语言现在包含泛型语法。我们吸取的教训是,Go 很少添加主要功能,并且只有在经过深思熟虑后才添加,以便更好地保持跨版本的广泛兼容性。

Go 的另一个潜在缺点是生成的二进制文件的大小。Go 二进制文件默认是静态编译的,这意味着运行时所需的所有内容都包含在二进制映像中。这种方法简化了构建和部署过程,但代价是简单的“Hello,world!” 在 64 位 Windows 上,大小约为 1.5MB。Go 团队一直致力于 在每个后续版本中减少这些二进制文件的大小 。还可以 通过压缩 或 删除 Go 的调试信息来缩小 Go 二进制文件。最后一个选项可能比云或网络服务更适合独立的分布式应用程序,在云或网络服务中,如果服务出现故障,那么拥有调试信息会很有用。

Go 的另一个备受推崇的功能,即自动内存管理,可以被视为一个缺点,因为垃圾收集需要一定量的处理开销。按照设计,Go 不提供手动内存管理,并且 Go 中的垃圾收集因不能很好地处理企业应用程序中出现的内存负载而受到批评。

也就是说,Go 的每个新版本似乎都改进了内存管理功能。例如,Go 1.8 显着缩短了垃圾收集的延迟时间。Go 开发人员确实有能力在 C 扩展中使用手动内存分配,或者通过 第三方手动内存管理库,但大多数 Go 开发人员更喜欢使用本机解决方案来解决这些问题。

围绕为 Go 应用程序(例如桌面应用程序中的 GUI)构建丰富 GUI 的软件文化仍然分散。

大多数 Go 应用程序都是命令行工具或网络服务。也就是说,各种项目正在努力为 Go 应用程序带来丰富的 GUI。有 GTK 和 GTK3 框架的绑定。另一个项目旨在提供 平台本机 UI,尽管这些依赖于 C 绑定并且不是用纯 Go 编写的。Windows用户可以尝试 walk。但这个领域还没有出现明显的赢家或安全的长期赌注,而且一些项目,例如谷歌试图构建跨 平台 GUI 库的项目,已经半途而废。此外,由于 Go 在设计上是独立于平台的,因此它们中的任何一个都不太可能成为标准包集的一部分。

尽管 Go 可以与本机系统功能对话,但它并不是为创建低级系统组件而设计的,例如内核或设备驱动程序或嵌入式系统。毕竟,Go 运行时和 Go 应用程序的垃圾收集器都依赖于底层操作系统。(对此类工作的尖端语言感兴趣的开发人员可能会考虑 Rust 语言。)

Go语言的未来 Go 的未来发展将更多地转向其开发者群体的需求,Go 的管理者会改变语言以更好地适应这些受众,而不是以顽固的榜样来引领。一个典型的例子是泛型,经过深思熟虑最好的方法后,泛型最终被添加到语言中。

2021 年Go开发者调查 发现,Go 用户总体上对该语言提供的功能感到满意,但也指出了很大的改进空间。Go 用户希望改进的首要领域是依赖管理(Go 中的一个持续挑战)、诊断错误和可靠性,而内存、CPU 使用率、二进制大小和构建时间等问题的排名要低得多。

大多数语言都倾向于一组核心用例。在 Go 出现的十年里,它的利基市场已经成为网络服务,并且它可能会继续扩大其占有率。总的来说,该语言的主要用例是创建 API 或 RPC 服务 (49%),其次是数据处理 (10%)、Web 服务 (10%) 和 CLI 应用程序 (8%)。

Go 语言吸引力日益增长的另一个迹象是,有多少开发者在对其进行评估后选择了它。在考虑使用 Go 进行项目的受访者中,75% 选择了该语言。在那些没有选择 Go 的人中,Rust (25%)、Python (17%) 和 Java (12%) 是首选选择。这些语言中的每一种都已经找到或正在寻找其他利基市场:Rust 用于安全快速的系统编程;用于原型设计、自动化和粘合代码的 Python ;和 Java 用于长期的企业应用程序。

Go 的速度和开发简单性将在多大程度上将其带入其他用例,或者 Go 将深入企业开发,还有待观察。但 Go 作为主要编程语言的未来已经确定——尤其是在云中,Go 的速度和简单性简化了可长期维护的可扩展基础设施的开发。