Golang,也被称为Go,是一种开源的编程语言。它是由谷歌创建的,旨在提供更快的应用程序,提高生产力,以及高代码效率。它被视为易于学习和开始使用。
Golang的用户案例。
- 云和网络服务–现在用Go构建服务比以前更容易了
- 命令行接口 - 使用Go来创建快速的CLI
- 网络开发 - Go为快速和可扩展的网络应用提供动力
- DevOps和网站可靠性 - Go是为支持DevOps和SRE而建立的。
其他编程语言面临的挑战
在其他编程语言中,当你需要用服务器建立一个应用程序时,你需要额外的服务器,并知道规格,以编写足够的代码。然而,Go不需要任何额外的服务器。你只需在一行上运行,使之变得简单易行。你只需要代码和配置服务器请求的快速性等。
我在ActionScript方面有经验,花了3个月的时间来学习建立网络应用所需的所有Java规范。JSE、JEE、JVM、TomCat规格等。当我开始学习Go时,只花了一个星期就开始构建网络应用。
Go的优点
Go的突出特点是速度、通信和内存容量,大约与C++的水平相同或更快。从我参与的C语言工作来看,你可以在Go中建立一个更快的应用程序。一般来说,用于监控汽车系统的C语言应用程序应该是很快的,但困难在于出错的时候。Go的语法和Python一样简洁,所以它吸引了那些想要更多性能的程序员。
Go在应用开发的初期有好处,因为你不需要担心依赖关系或构建配置。当你使用任何第三方库时,它们会在你构建应用时被自动添加到你的项目中。你所需要做的就是运行go mod init
来初始化新的根模块。
Go也有一个垃圾收集器,所以你不必太担心内存管理。然而,这也有弊端。Go的一个重要功能是goroutines。这是一种轻量级的方法,可以独立运行一个函数或方法,并同时与你程序中存在的任何其他Goroutines相连接。Go中的垃圾收集器是在堆增加两次和至少每两分钟一次的情况下强制进行的。
现在让我们想象一下,我们需要建立一个高负载的应用程序,每秒有几百或几千个同时进行的任务,应该向用户发送通知。如果GC每两分钟强制一次,这意味着所有当时正在运行的goroutines必须暂停,直到GC完成它的工作。这时,goroutines才继续工作。当企业需要立即发送通知时,这确实是一个瓶颈。很明显,我们可以禁用GC,从Go代码中触发,但这需要一个有经验的团队和巨大的测试费用。
Go可以用来做什么,它与其他语言有什么不同?
当你为你的应用程序设计一个微服务架构时,你不需要真正关心你应该采取什么语言。你可以用Java建立一些服务,用PHP建立另一个服务,等等。它们可以通过REST、SOAP、RPC等方式相互通信。但是,如果服务之间的通信时间对你的应用程序很重要,而且你真的想把它降到最低,你可以:减少请求/响应的序列化/序列化时间(最好的是gRPC协议),并通过选择没有虚拟机的编译语言(C、C++、Go等),在服务端删除VM/解释器。你也可以使用轻量级的异步函数/方法来在单个服务副本上运行尽可能多的请求。
在我看来,最好的解决方案是Go + gRPC,只是因为:
- Go支持gRPC的所有功能,而且非常容易实现
- Go有GC,你不需要像C那样关心内存问题
- Go有简单的语法,因此,新的团队成员不需要花很多时间来理解服务代码
- 你可以在微服务、移动应用或桌面中使用Go。我不建议现在就在Go中构建移动应用,因为它刚刚开始支持移动SDK。目前,Kotlin/Dart在这方面要好得多。
Java和Go都有一个垃圾收集器。从开发者的角度来看,Java很复杂,因为每个独立的应用程序都要用不同的参数对GC进行测试,这很耗费时间。对于Go,只有一个选择,你只需接受或拒绝它。
结论
展望这个简单而复杂的语言将走向何方,我预测Go V2将带来像Java一样的泛型,但会带来成本方面的好处,并在未来建立通用解决方案。我也希望移动SDK能得到改进。
Go是一种非常年轻的语言,我们没有很多公开的框架,因为我们还没有发掘出所有的领域来编写完整的所需的库。在我看来,如果你在Go中读到了什么,就用Go来写吧。语言很简单–自己写吧