一、Golang的执行流程——两种执行流程
1、go build运行
终端打开.go文件所在目录,在命令行输入go build xxx.go,如果没有编译错误,将会在相同目录下生成一个可执行的.exe文件,然后在命令行运行这个exe文件即可。
以下为一个演示示例,仅供参考。在编译执行编译后,用dir查看发现当前文件夹下多了一个exe文件,运行这个exe文件即可看到终端输出了“Hello world!”。
>go build helloworld.go
>dir
helloworld.go
helloworld.exe
>helloworld.exe
Hello world!
2、go run运行
终端打开.go文件所在目录,在命令行输入go run xxx.go,如果没有编译错误,会在终端直接编译并执行go文件,但不会生成.exe文件。
以下为一个演示示例,仅供参考。发现直接运行go run xxx.go后,直接输出了“Hello world!”。用dir查看 目录下并没有exe文件。
>go run helloworld.go
Hello world!
>dir
helloworld.go
二、两种运行方式的区别——可执行文件exe的生成
首先,我们可以明显的感受到二者的不同,就在于可执行文件exe是否有生成。
go build的好处是,一旦编译完成,你可以多次运行得到相同的二进制文件,而不需要重新编译。这对于大型项目或者需要频繁运行的项目来说,可以提高运行效率。
go run更加适合一次性运行的简单程序或脚本,适合用于单元开发测试。
一般而言,先build生成exe文件不仅是一种良好的编程习惯,也避免了每次运行都需要重新编译的开销,尽管run本质也是在底层先运行了编译程序,然后再执行文件,但显然对于需要重复执行的文件,反复编译的过程增大了开销。
另外,go build在编译时会将程序运行依赖的库文件包含在可执行文件中,尽管这会使得可执行文件在空间上大了许多,但这也减少了反复运行时的开销,并且当该可执行文件被拷贝到另一个没有该库文件或者go环境的机器上时,也能够运行,而go run的运行需要有go的开发环境。
三、一些编译时的注意与说明
1、编译器可以将go源文件编译成机器可以识别的二进制码文件
2、在源文件目录下可以用go build 对.go文件进行编译,并且可以指定可执行文件的名字,但在windows下必须以.exe后缀来命名可执行文件,示例如下。
>go build -o hello.exe helloworld.go
3、如果程序没有编译错误,则go build会在当前目录下生成一个可执行文件;若有错误,编译时会报错。