Go的编译

Go语言是一门需要编译才能运行的编程语言,也就说代码在运行之前需要通过编译器生成二进制机器码,随后二进制文件才能在目标机器上运行,如果我们想要了解Go语言的实现原理,理解它的编译过程就是一个没有办法绕过的事情。

Go语言编译器的源代码在 src/cmd/compile 目录中,目录下的文件共同构成了Go语言的编译器,学过编译原理的人可能听说过编译器的前端和后端,编译器的前端一般承担着词法分析、语法分析、类型检查和中间代码生成几部分工作,而编译器后端主要负责目标代码的生成和优化,也就是将中间代码翻译成目标机器能够运行的机器码。

Go的编译器在逻辑上可以被分成四个阶段:词法与语法分析、类型检查和 AST 转换通用 SSA 生成和最后的机器代码生成

Go的运行

Go build

go build命令用来启动编译,可以将go编写的程序与相关以来编译成一个可执行文件。

#[name]参数可传入多个
go build [name]
  • [name]为空时:如果当前目录存在main包,则会生成一个与当前目录名相同的可执行文件,在不同的操作系统中,生成的文件不同。

  • [name]不为空时:

    • 如果[name]为非main包下的源文件名,编译器将只对该包进行语法检测,不生成可执行文件。
    • 如果[name]main包下的源文件名(可能有多个),编译器将生成一个与第一个[name]同名的可执行文件,在不同的操作系统中,生成的文件不同。

在上一章中,我们创建了第一个Go的程序,我们可以对第一个项目进行build

#进入项目目录
cd myfirstproject

#进行编译生成 可以不填写参数
go build [main.go]

#当前目录下会产生一个可执行文件
#如果带参数,将会生成名叫main的可执行文件
main 
#如果不带参数,将会生成与当前目录名相同的可执行文件
myfirsproject

#运行可执行文件
./main #./myfristproject

打印出Hello World!

Go run

go run命令是将go build命令和执行生成的可执行文件二合一的命令,该命令不会生成可执行文件,但是可以运行。但在go run命令中,参数是不可以省略的,并且参数必须时同一main包下的所有源文件名。

go run main.go

这将会直接打印出Hello World!,并且不产生可执行文件。

Go install

go install命令会把项目进行编译并安装,go install命令将会把可执行文件放入你的工作空间($GOPATH)下的bin目录中,将库文件放入工作空间($GOPATH)下的pkg目录中。如果你配置了环境变量的情况下($GOPATH/bin),那么你就可以不在可执行文件的目录下运行可执行文件。

Go get

go get命令可以用于拉取远程项目,该命令需要git,所以在使用该命令前,需要先安装git。当你用go get从远程分支中拉取项目时,该项目会被编译安装,可在工作空间目录下的bin目录中找到可执行文件。如果当前项目已从远程拉下来,使用go get -u还可以更新该项目。

其他命令

如果你还对其他命令感兴趣,可以使用go help命令查看所有命令的解释。如果你想了解一个命令,你还可以使用go help <topic>查看更多信息,例如:go help build

文章作者: Willxup
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Willxup
Go Go
喜欢就支持一下吧