go run

2021-12-25  本文已影响0人  JunChow520

源码文件

Golang源码文件分为三种类型,分别是命令源码文件、库源码文件、测试源码文件

命令源码文件

go run

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 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
上一篇下一篇

猜你喜欢

热点阅读