1.简介
编译并运行 Go 程序。
2.格式
代码语言:javascript复制go run [build flags] [-exec xprog] package [arguments...]
run 编译并运行指定的 main 包。
通常,main 包被指定为来自单个目录的 .go 源文件列表,但它也可能是导入路径、文件系统路径或与单个已知包匹配的模式,例如go run .
或go run my/cmd
。
如果包参数有版本后缀(如 @latest 或 @v1.0.0),go run 将以模块感知模式构建程序,忽略当前目录或任何父目录中的 go.mod 文件(如果有)。这对于运行程序而不影响主模块的依赖项很有用。
如果包参数没有版本后缀,“go run”可能会在模块感知模式或 GOPATH 模式下运行,具体取决于 GO111MODULE 环境变量和 go.mod 文件是否存在。有关详细信息,请参阅“go help modules”。如果启用了模块感知模式,“go run”将在主模块的上下文中运行。
默认情况下,“go run”直接运行已编译的二进制文件:“a.out 参数…”。如果给出了 -exec 标志,“go run”将使用 xprog 调用二进制文件:
代码语言:javascript复制xprog a.out arguments...
如果未给出 -exec 标志,GOOS 或 GOARCH 与系统默认值不同,并且可以在当前搜索路径上找到名为 go_KaTeX parse error: Expected group after '_' at position 5: GOOS_̲GOARCH_exec 的程序,则“go run”使用该程序调用二进制文件,例如“go_js_wasm_exec a.out 参数…”。当模拟器或其他执行方法可用时,这允许执行交叉编译的程序。
默认情况下,“go run”会编译二进制文件而不生成调试器使用的信息,以减少构建时间。要将调试器信息包含在二进制文件中,请使用“go build”。
有关构建标志的更多信息,请参阅“go help build”。有关指定包的更多信息,请参阅“go help packages”。
3.示例
(1)运行单个源文件。
代码语言:javascript复制go run main.go
(2)运行多个源文件。
代码语言:javascript复制go run file1.go file2.go
(3)运行当前目录的 main 包。
代码语言:javascript复制go run .
(4)传递参数给程序。
代码语言:javascript复制go run . arg1 arg2
这条命令会编译并运行当前目录的 main 包,并将 arg1 和 arg2 作为程序的参数传递给它。
(6)指定包名运行。
代码语言:javascript复制go run github.com/user/project/pkg
这条命令会编译并运行指定包的入口文件。
(7)使用 build flags。
例如根据指定的 build tags 编译并运行 main.go,例如 -tags 参数可以指定 production 或 debug 等标签。
代码语言:javascript复制go run -tags production main.go
再比如不实际运行程序,而是显示编译过程中的详细信息,包括命令行参数和优化器的处理步骤。
代码语言:javascript复制go run -n main.go
4.注意事项
go run 仅用于临时运行代码,不会生成可执行文件。对于正式发布的程序,请使用 go build。
通过 go run 运行代码时,Go 语言会在运行前先执行编译操作,因此首次运行可能会花费一些时间。
5.常见用途
go run 是一个强大而灵活的工具,为开发者提供了便捷的代码测试和验证方式,同时也为调试和排查问题提供了方便。通过合理使用 go run,能更高效地进行 Go 语言开发。
常见用途:
- 快速测试和验证代码逻辑。
- 临时运行调试代码。
- 运行单个文件或多个文件,避免生成不必要的可执行文件。
- 通过传递参数测试不同的输入。
参考文献
Command Documentation go command documentation