go run

源码文件

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

命令源码文件

  • 命令源码文件总应该属于main代码包,即必须包含一个无参声明且无结果声明的main函数。
  • 单个命令源码文件可以被单独编译,也可以被单独安装,也可以被单独安装。

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 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值