购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.4 为工程服务的语言

从Go语言的“出身”来看,它更像学院派语言,但实际上设计它的初衷是将其用作为工程服务的语言。Go语言具有开发效率高、代码规范统一、写并发相对容易等特点,非常适合团队开发。它的应用场景包括基础架构、中间件、云原生开发等。Go语言简化了指针设计,实现了将变量初始化为零值、通过 runtime 分配内存、内存逃逸分析以及自动垃圾回收等功能,让内存使用变得更为简单和安全。从这些实现细节中,我们可以深刻地认识到Go语言是一门为工程服务的编程语言。

1.静态强类型编译型语言

Go语言是一种静态强类型编译型语言,它具有以下特征。

(1)因为是静态语言,所以在程序运行之前就已经知道值类型是什么。这是一件很好的事情,可以在编译时就检查出隐藏的大多数问题。如果我们在错误的位置使用了错误的类型,Go语言就会及时告诉我们(比如常见的类型转换错误)。这减少了隐藏的缺陷(Bug),使线上的稳定运行成为可能。

(2)因为是强类型语言,所以类型之间的转换是显式的。

(3)因为是编译型语言,所以在运行前需要先生成二进制机器码。

提示: 与静态语言相对的是动态语言。因为动态语言没有编译器,所以在执行过程中只能逐条地判断对错,如果出现问题,可能会立即崩溃或产生异常。静态语言会在编译过程中直接将源码转换为机器码,这意味着程序在运行时不需要实现额外的解释过程,因此可以提供更快的运行速度。此外,它还可以在编译过程中进行代码优化,如函数内联优化、消除死代码、展开循环等,以提高机器码的性能。

2.静态链接

关于静态链接和动态链接的争议一直存在。在笔者看来,在存储已经很便宜的今天,静态链接可能是更好的选择。Go语言正好属于静态链接库阵营。在Go语言中,一个几千字节大小的“hello world”程序编译后的可执行文件会达到几兆字节大小,这是因为Go语言在编译时会将一些静态链接库以及runtime环境打包到可执行文件中,虽然体积变大了,但程序更具可移植性和独立性了。不要低估了这一点,因为在复杂的生产系统中,使用动态链接可能会存在程序依赖于多个版本库的问题。此外,静态链接还具有另一个优势,即编译一次即可在任何地方运行。众所周知,部署Java程序需要在运行环境中安装JRE,而编译后的Go语言可执行文件并不依赖于任何运行环境,也就是说,它可以直接运行。这进一步证明了Go语言是以实用为主的工程语言。

3.编译速度快

“天下武功唯快不破”,程序的编译与执行也是如此。但是,对于快速编译和快速执行,我们往往只能选择其一,就像鱼与熊掌不可兼得一样。C语言运行速度快,但编译速度慢,依赖库运行时错误很多。Java的执行速度和编译速度都不错,但在不同的环境下,需要使用不同的 JVM运行代码。Go 语言一开始就考虑实现快速编译,就像解释型语言一样,我们不会注意到它正在编译。用Go语言编写的项目可以在秒级完成编译,这对提高生产力很重要!

4.执行性能高

Go语言虽然简单,语法糖少,但性能不差。它的性能略低于C++,相当于Java,比Python快几十倍。表1-1是The Benchmarks Game 中列出的编程语言性能数据,其中给出了在10种性能测试方法下多种语言的运行时间。

表1-1 10种性能测试方法下多种语言的运行时间对比(单位:秒)

从表1-1可以看出,在这10种性能测试方法下,C++的性能最好,Go与Java差不多,Python要慢几个数量级。

5.支持跨平台交叉编译

Go语言支持跨平台交叉编译,可以轻松地根据指定的平台编译源码并运行。

6.拥有丰富的工具链

Go语言拥有丰富的工具链(命令行工具),包括编译、运行调试、下载和代码格式化等工具。 LZesOheiXYDX/4y/0TDUV3vs7tQ3EnSwpvdI6auf+FKkvgPhCEFaRyWtFA73hl2a

点击中间区域
呼出菜单
上一章
目录
下一章
×