go语言没有如 java 一样的 jvm 虚拟机,那么它是如何实现在跨平台运行的呢?
实际上 go 语言使用了另外一种思路,java是一处编译处处使用,而go是一次代码处处编译吧(可能我这个名字起的不太好)。
说句人话,它直接将代码编译成不同平台对应的机器码,在不同平台上直接运行,根本不需要虚拟机,这也是我认为 go 最大的好处了(不过它的语法实在是太扯了)。
说到这里,它到底怎么用呢?就不得不提交叉编译这个概念了,因为我们一般是在 windows/mac 开发,在linux上部署。也就是说我们需要在 windows/mac 上编译出 linux 的机器码,go 是完全支持的。
- Windows 下编译 Mac 和 Linux 64位可执行程序
// mac
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
// linux
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
- Mac 下编译 Linux 和 Windows 64位可执行程序
// linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
// window
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
- Linux 下编译 Mac 和 Windows 64位可执行程序
// mac
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
// window
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
参数:
- GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
- GOARCH:目标平台的体系架构(386、amd64、arm)
- 交叉编译不支持 CGO 所以要禁用它
版权声明:本文为maihilton原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。