在Go语言的日常开发中,go run和go build是两个最基础也最常用的命令,很多刚接触Go的开发者经常会混淆两者的用法,不清楚什么时候该用哪个命令。理解两者的差异和适用场景,能帮助我们更高效地完成开发和部署工作。

go run 命令的核心特性
go run命令主要用于快速运行Go源代码,它的执行过程不会在当前目录生成可执行文件,而是将编译和运行的步骤合并,编译后的临时文件会存放在系统的临时目录中,程序运行结束后临时文件会被自动清理。
我们可以通过一个简单的示例代码来观察go run的执行效果,首先创建main.go文件,内容如下:
package main
import "fmt"
func main() {
fmt.Println("Hello Go run command")
}执行命令go run main.go,终端会直接输出Hello Go run command,此时查看当前目录,不会生成任何可执行文件。
go run 的适用场景
- 开发阶段快速验证代码片段逻辑,不需要生成最终产物
- 运行简单的测试脚本,执行完即结束的场景
- 临时调试单个Go文件的逻辑,无需留存可执行文件
go build 命令的核心特性
go build命令的作用是编译Go源代码,并且会在当前目录或者指定目录生成对应的可执行文件,默认情况下生成的可执行文件名称和当前目录名一致,也可以通过-o参数指定输出文件名和路径。
我们使用同样的main.go文件,执行命令go build main.go,此时当前目录会生成一个名为main的可执行文件(Windows系统下为main.exe),执行这个可执行文件也会输出同样的内容。
也可以通过-o参数指定输出文件的名称和路径,示例命令如下:
# 指定输出文件名为app,存放在当前目录 go build -o app main.go
执行后当前目录会生成app可执行文件,运行该文件即可得到预期输出。
go build 的适用场景
- 需要将程序部署到生产环境或者测试环境,生成可复用的可执行文件
- 开发完成后打包最终产物,分发给其他用户使用
- 编译跨平台的可执行文件,通过配置
GOOS和GOARCH环境变量实现,示例如下:
# 编译Linux平台的可执行文件,当前在Mac或Windows系统下执行 GOOS=linux GOARCH=amd64 go build -o app_linux main.go
两者的核心差异对比
我们可以通过表格更清晰地看到两者的核心区别:
| 对比维度 | go run | go build |
|---|---|---|
| 是否生成可执行文件 | 否,临时文件存放在系统临时目录 | 是,默认在当前目录生成 |
| 执行流程 | 编译+运行合并,运行完清理临时文件 | 仅编译,生成可执行文件后需要手动运行 |
| 适用阶段 | 开发调试阶段 | 打包部署阶段 |
| 跨平台编译支持 | 不支持,仅编译当前平台临时文件 | 支持,可通过环境变量配置目标平台 |
实际使用建议
在日常开发中,建议开发阶段写代码和验证逻辑时优先使用go run,能快速得到执行结果,不需要手动清理生成的可执行文件。当代码开发完成,需要部署或者交付时,使用go build生成对应的可执行文件,根据部署环境的需求配置对应的编译参数即可。
另外需要注意,go run只能运行包含main包的Go文件,如果运行的是非main包的代码,会直接报错,而go build编译非main包时不会生成可执行文件,只会检查代码的编译错误,也可以用于校验代码的语法正确性。