43

我一直在研究 Golang,发现它有一个编译器。但它是将 Go 编译成汇编级代码还是只是将其转换为 BYTECODES 然后调用该编译?我的意思是,即使在 PHP 中,我们也能够将其转换为 BYTECODES 并具有更快的性能。Golang 是系统级编程和编译的替代品吗?

4

2 回答 2

67

这确实是一个编译器(实际上它嵌入了 2 个编译器),它可以生成完全自给自足的可执行文件。您不需要任何补充库或任何类型的运行时来在您的服务器上执行它。你只需要为你的目标计算机架构编译它。

文档中

有两个官方的 Go 编译器工具链。本文档重点介绍 gc Go 编译器和工具(6g、8g 等)。有关如何使用 gccgo(使用 GCC 后端的更传统的编译器)的信息,请参阅设置和使用 gccgo。

Go 编译器支持三个指令集。不同架构的编译器质量存在重要差异。

amd64(又名 x86-64);6g,6l,6c,6a 成熟的实现。编译器有一个有效的优化器(注册器)并生成好的代码(尽管 gccgo 有时可以做得更好)。

386(又名 x86 或 x86-32);8g,8l,8c,8a 媲美amd64端口。

手臂(又名 ARM);5g,5l,5c,5a 仅支持 Linux 二进制文件。没有其他端口广泛使用,因此没有经过全面测试。

除了低级操作系统接口代码之外,所有端口的运行时支持都是相同的,包括标记和清除垃圾收集器、高效的数组和字符串切片,以及对高效 goroutine 的支持,例如堆栈按需增长和收缩。

编译器可以针对 FreeBSD、Linux、NetBSD、OpenBSD、OS X (Darwin) 和 Windows 操作系统。完整的支持组合在下面的环境变量讨论中列出。

在服务器上,您通常会针对amd64平台。

请注意,Go 以编译速度着称。在部署我的服务器程序时,我不会在开发计算机上为不同的平台构建:我部署源代码并直接在生产服务器上编译。自 Go1 以来,我从来没有在一个平台上编译过代码,也没有在其他平台上编译过。

在 Windowsexe上,我在我的开发计算机上制作并简单地将其发送exe给从未安装过任何 Go 相关内容的人没有问题。

于 2012-09-03T13:47:42.857 回答
1

Go 可以快速编译为机器码,但具有垃圾收集的便利性和运行时反射的强大功能。它是一种快速、静态类型的编译语言,感觉就像是一种动态类型的解释语言。

来源 - golang.org

于 2020-10-15T02:50:12.997 回答