go run
2021-12-25 本文已影响0人
JunChow520
源码文件
Golang源码文件分为三种类型,分别是命令源码文件、库源码文件、测试源码文件
命令源码文件
- 命令源码文件总应该属于
main
代码包,即必须包含一个无参声明且无结果声明的main
函数。 - 单个命令源码文件可以被单独编译,也可以被单独安装,也可以被单独安装。
go run
go run
命令包含了两个动作:编译命令源码文件、运行对应的可执行文件
go run
命令用于编译源码并直接执行源码的main()
函数,同时不会再当前目录下留下可执行文件。其它语言比如Python、Lua必须借助虚拟机在不输出二进制的情况下直接执行代码,而Golang不使用虚拟机。
$ go help run
usage: go run [build flags] [-exec xprog] package [arguments...]
-
go run
命令可以编译并运行命令源码文件,由于包含了编译动作,因此可接受用于go build
命令的标记。 -
go run
命令只接受Golang源码文件作为参数,不会接受代码包作为参数。 -
go run
命令不允许多个命令源码文件作为参数,即使他们在同一个代码包,因为每个命令源码包都具有一个main
函数声明。
go run
命令会在执行时检查源码文件的类型,若参数没有或存在多个命令源码文件,则会打印错误提示并退出。通过参数检查go run
会编译参数中的命令源码文件,并将编译后的可执行文件存放到临时工作目录中。
go run
命令不会在运行目录下生成任何文件,可执行文件会被放在临时文件中被执行,工作目录会被设置为的当前目录。若需编译运行包则需要通过go build
生成可执行文件,然后运行可执行文件。
标记 | 描述 |
---|---|
-a | 强制编译相关代码,无论编译结果是否是最新的。 |
-n | 打印编译过程中所需运行的命令,但并不会真正执行它们。 |
-x | 打印编译过程中所需运行的命令并执行 |
-p n | 并行编译,n为并行数量,通常为CPU逻辑核心数量。 |
-v | 打印被编译的代码包名称 |
--work | 打印编译时创建的临时工作目录路径且不删除 |
go run -n
go run -n
用于打印相关命令而不实际执行
$ go run -n main.go
#
# command-line-arguments
#
mkdir -p $WORK\b001\
cat >$WORK\b001\_gomod_.go << 'EOF' # internal
...
#
注释信息中command-line-arguments
表示虚拟代码包信息,go build
编译命令在分析参数时若发现第一个参数是Go源码文件而非代码包则会在内部生成一个名为command-line-arguments
的虚拟代码包。
$WORK
表示临时工作目录的绝对路径 ,为了存放虚拟代码包command-line-arguments
的编译结果,命令会在临时工作目录中创建名为command-line-arguments
的子目录,并在其下创建_obj
子目录和_obj/exe
子目录。
go run -x
$ go run -x main.go
go run
命令的-x
标记可用于查询过程中执行的命令,同时这些命令会被真正被执行,这是和-n
不同的地方。
go run --work
go run
命令的--work
标记可以打印运行命令源码文件过程中临时工作目录的位置。
$ go run --work main.go
WORK=C:\Users\junchow\AppData\Local\Temp\go-build2651005799
arg1: C:\Users\junchow\AppData\Local\Temp\go-build2651005799\b001\exe\main.exe