非零基础自学Golang
第15章 Go命令行工具
15.1 编译相关指令
15.1.3 install
go install命令的作用是编译后安装,该命令依赖于GOPATH,因此不能在独立的目录中使用该命令。
与go build不同的是,go install是将编译的中间件放到pkg目录下,将编译出来的可执行文件放到bin目录下。
使用动手写15.1.1和动手写15.1.2来运行go install命令。
C:\Users\admin\go\src\main>go install
OK,执行没报错
运行后,在目录C:\Users\admin\go\bin中就会生成可执行文件main.exe,由于这个包没有产生中间文件,因此在目录C:\Users\admin\go\pkg下就没有该包的pkg文件。
go install可以使用大部分go build的附加参数,由于go install的可执行文件的输出目录始终是GOPATH下的bin目录,因此不能使用-o参数指定输出的可执行文件名。
go install依旧可以使用-n参数来查看运行过程中该命令到底做了哪些事情。
C:\Users\admin\go\src\main>go install -n
可见,go install命令只是多了将可执行文件移动到bin目录下的动作。
15.1.4 交叉编译
交叉编译就是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统。
举个例子,你使用Windows系统编写了一个Go语言程序,你的朋友想要在他的电脑上运行,可是他的电脑是Mac系统,又没有安装Go语言的编译器,这时你就可以在你的电脑上通过交叉编译的方式编译一个Mac系统可以直接运行的程序。
Go语言的交叉编译非常方便,只需在编译前设置一下Go的环境变量CGO_ENABLED、GOOS和GOARCH即可。
在Windows上编译Mac程序如下
# Windows下编译Mac
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
其中GOOS为目标操作系统,GOARCH是目标操作系统的架构,CGO_ENABLED表示是否使用C语言版本的GO编译器,参数配置为0的时候就关闭C语言版本的编译器了。
【注意】
自从Golang 1.5以后,Go语言进行了自举,也就是Go语言编译器使用Go语言编写,而不再使用C语言。
【1】Windows下编译Linux
01 # Windows下编译Linux
02 SET CGO_ENABLED=0
03 SET GOOS=linux
04 SET GOARCH=amd64
05 go build main.go
【2】Mac下编译Linux、Windows
01 # Mac下编译Linux
02 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
03
04 # Mac下编译Windows
05 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
【3】Linux下编译Mac、Windows
01 # Linux下编译Mac
02 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
03
04 # Linux下编译Windows
05 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go