介绍
go run 是Go语言开发调试专用命令,底层逻辑:编译源码到系统临时目录 → 运行二进制程序 → 默认运行结束自动删除临时编译产物,不会在项目目录生成可执行文件。
语法
go run [flags] 源码文件 [程序参数]
# 当前目录为main包时,go run . 编译目录下全部go文件
注意: flag 参数必须写在go文件前面;源码文件之后的内容,是传给你业务程序的运行参数。
常用参数
-work:打印临时编译目录路径,程序结束依旧删除文件-work=n:打印临时目录,程序结束保留编译产物,用于调试查看生成的二进制-v:输出编译详细日志-x:打印底层执行的全部命令-race:开启并发竞态检测
Windows临时目录:
%TEMP%\go-buildxxxxxx
Linux/macOS临时目录:$TMPDIR/go-build*
执行流程
- 校验代码:必须是
package main,包含func main()入口 - 编译源码与依赖,输出二进制到系统临时文件夹
- 执行编译后的二进制程序
- 程序正常退出,自动清理临时目录;程序崩溃可能残留临时文件
应用场景
- 验证小Demo、语法、标准库/第三方库API、算法逻辑
- 本地开发调试Web服务,修改代码后快速迭代测试
- 运行一次性脚本工具,处理文件、数据,不需要保存程序
- 调试编译、并发问题,配合参数查看编译过程、临时产物
- 教学演示示例代码
❌ 不适合场景
- 生产环境:每次启动都要编译,性能差;临时目录不利于进程托管,禁止用于systemd等服务配置
- 需要把程序分发给其他人(对方必须有Go环境)
- 需要复用编译产物
- 正式部署上线
使用建议
go run 只用于本地开发调试,但凡要交付、部署、发布,一律改用 go build
- 开发调试阶段:
go run .快速跑程序 - 上线部署:
go build -o 输出文件名生成二进制,直接运行二进制文件 - 需要保存临时编译产物调试:
go run -work -work=n . - 需要代码保存自动重启:使用第三方工具
air,而非go run本身。