3.1.3 怎样执行Go语言程序

在编译完Go语言源代码后,会生成Go语言的可执行文件,根据所用编译命令的不同,生成在不同的目录下。

如果使用go build命令,可执行文件hello.exe会被生成在与源文件相同的目录下,即C:\goprjs\src\hello目录下。我们在同一目录下执行hello命令(无须输入后面的后缀“.exe”),即可执行该程序。

如图3.9所示,可以看到程序的运行结果是输出了一行文字“Hello world!”,这就是编程书籍中常作为第一个例子的Hello world!程序,我们用Go语言正常实现了这个程序。

图3.9 用命令行方式在代码目录执行Go语言程序

如果使用go install命令生成可执行文件,该文件会位于我们设定的C:\goprjs\bin目录下,由于前面已经把C:\goprjs\bin目录加入了PATH环境变量,因此,在任何目录下都可以直接执行hello程序。

如图3.10所示,使用go install命令编译hello.go程序,然后进入C盘的根目录,再执行hello命令,仍然可以正确执行该程序。为了确认我们执行的是否是C:\goprjs\bin目录下的hello.exe可执行文件,可以用where命令加参数hello来查看执行的究竟是哪个目录下的hello程序。从where命令的输出信息可以看到,执行的确实是C:\goprjs\bin目录下的hello.exe程序。

图3.10 在任意目录执行Go语言程序

注意

在Mac OS和Linux系统中,与where相类似的命令是which。

在LiteIDE等开发工具中,也可以直接通过Run菜单项或者相应的快捷键来执行程序。但由于在这些工具内执行程序并没有在CMD或其他命令行环境下执行程序方便,所以不建议在开发工具中直接执行程序。

另外,对于比较简单的程序,Go语言也提供一种直接运行程序而无须编译的方法,就是使用go run命令。对于Hello world ! 程序,可以直接执行go run hello.go命令运行该程序,如图3.11所示。

图3.11 用go run命令编译执行Go语言程序

go run命令其实是自动进行编译并执行的过程,但是编译生成的可执行文件存放在临时目录下,执行完毕后会在适当的时候被删除。为了证明这一点,我们可以用下面修改后的Hello world!程序来验证,见代码3-2。

package main

import (
  "fmt"
  "os"
)

func main() {
  fmt.Println("Hello world!")

  dir,  _  := os.Executable()
  fmt.Println(dir)

}

代码3-2 修改后的hello/hello.go

我们暂时不对源代码做过多解释,仅需要知道这次的代码将在输出“Hello world!”的文字后,会再输出本程序的可执行文件的路径(也就是可执行文件所在的文件夹加上可执行文件名)。

从图3.12中可以看出,用go run执行hello.go源代码时,确实生成了临时可执行文件hello.exe,并且该文件在一个临时目录下(图中的C:\Users\topxe\AppData\Local\Temp\go-build819256690\b001\exe目录)。

图3.12 查看Go语言可执行程序运行的位置