Google的Golang是解释器还是编译器?

问题描述 投票:28回答:1

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

system gcc go
1个回答
52
投票

这实际上是一个编译器(实际上它嵌入了2个编译器),并且使自己完全具有可执行性。您不需要任何补充库或任何类型的运行时即可在服务器上执行它。您只需要针对目标计算机体系结构对其进行编译。

来自the documentation

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

Go编译器支持三个指令集。有重要的不同编译器质量的差异建筑。

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

386(也称为x86或x86-32); 8g,8l,8c,8a相当于amd64端口。

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

底层操作系统接口代码,运行时之类的东西所有端口的支持均相同,并且包括标记清除垃圾收集器,有效的数组和字符串切片,以及对高效的goroutine,例如按需增长和收缩的堆栈。

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

在服务器上,通常将目标锁定在amd64平台上。

请注意,Go以编译速度而闻名。在部署服务器程序时,我不会在开发计算机上针对不同的平台进行构建:我部署了源代码,并直接在生产服务器上进行了编译。从Go1开始,我再也没有在一个平台上编译代码,而没有在另一个平台上编译代码。

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

© www.soinside.com 2019 - 2024. All rights reserved.