googles GOLANG是解释器还是编译器?

26 gcc system go

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

Den*_*ret 50

这实际上是一个编译器(事实上它嵌入了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(又名ARM); 5g,5l,5c,5a 仅支持Linux二进制文件.使用不如其他端口广泛,因此没有经过全面测试.

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

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

在服务器上,您通常会以amd64平台为目标.

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

在Windows上我exe在我的开发计算机上制作一个没有问题,只是将它发送exe给从未安装任何Go相关的人.

  • @Skaperen @nos您可以将-S传递给编译器以查看汇编代码.`go build -gcflags -S`将运行编译器,将-S传递给输出程序集.您也可以直接调用编译器,例如`go tool 8g -S <source.go>` (11认同)
  • @ProgramCpp“运行时”嵌入在exe中。 (2认同)

Alo*_*thi 5

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

来源 - golang.org