1. Go 总是在构建中包含二进制文件
Go 运行时提供内存分配、垃圾收集、并发支持和网络等服务。它被编译到每个 Go 二进制文件中。这与许多其他语言不同,其中许多语言使用虚拟机,需要与程序一起安装才能正常工作。
将运行时直接包含在二进制文件中使得分发和运行 Go 程序变得非常容易,并避免运行时和程序之间的不兼容问题。
2. Go没有针对程序依赖的集中托管服务
为了访问已发布的 Go 程序,开发人员不依赖集中托管的服务,命令go install行允许以这种方式下载存储库。
3. Go 是按值调用
在 Go 中,当您提供一个基元(数字、布尔值或字符串)或一个结构体(大致相当于类对象)作为函数的参数时,Go 总是会复制该变量的值。
在许多其他语言(例如 Java、Python 和 JavaScript)中,基元是按值传递的但对象(类实例)是按引用传递的,这意味着接收函数实际上接收的是指向原始对象的指针, 而不是其副本。
这意味着在接收函数中对对象所做的任何更改都会反映在原始对象中。
4.Go有隐式接口
与其他语言不同的是,Go 中的接口不是显式实现的,而是隐式实现的。具体类型不声明它实现接口。相反,如果该具体类型的方法集包含底层接口的所有方法集,则Go 认为该对象实现了该接口。
这种隐式接口实现(正式称为结构类型)允许 Go 强制执行类型安全和解耦,从而保留了动态语言中表现出的大部分灵活性。
5. 错误处理
Go 中的错误处理方式与其他语言有很大不同。简而言之,Go 通过返回 error 类型的值作为函数的最后一个返回值来处理错误。
6.并发性
并发性可以说是 Go 最著名的功能,允许在机器或服务器上的可用内核数量上并行运行处理。当单独的进程不相互依赖(不需要顺序运行)并且时间性能至关重要时,并发最有意义。I/O 需求经常出现这种情况,其中读取或写入磁盘或网络的速度比除了最复杂的内存中进程之外的所有进程都要慢几个数量级。
Go 中的并发是一项深入且相当高级的功能,但在有意义的地方,它提供了一种有效的方法来确保程序的最佳性能。
7.Go标准库
Go 是一种相对年轻的语言,这意味着标准库可以满足现代应用程序的许多问题/需求。
其一,Go 为网络(特别是 HTTP/2)和文件管理提供世界一流的支持。它还提供本机 JSON 编码和解码。因此,设置服务器来处理 HTTP 请求并返回响应(JSON 或其他)非常简单,这解释了 Go 在开发基于 REST 的 HTTP Web 服务中的受欢迎程度。
8. 调试:Go Playground
使用任何语言进行调试都是一项关键要求。大多数语言都依赖第三方在线工具或智能 IDE 来提供调试工具,使开发人员能够快速检查其代码。