go run 直接执行 .go 文件,自动完成编译、链接、运行全过程,不保留临时二进制;要求 package main 和 func main() 严格符合规范,且文件编码须为 UTF-8(no BOM)。

go run 命令直接执行 .go 文件,无需显式编译
Go 的设计哲学之一是“编译即运行”,go run 会自动完成编译、链接、执行全过程,临时二进制文件不保留。这和 gcc hello.c -o hello && ./hello 的两步流程不同。
- 确保当前目录下有
hello.go,内容为标准包结构(含package main和func main()) - 运行
go run hello.go,输出Hello, World即表示环境可用 - 若报错
command not found: go,说明PATH未包含 Go 安装路径(如/usr/local/go/bin) - 若报错
no Go files in current directory,检查文件名是否拼错、是否漏写.go后缀、或当前目录是否正确
main 包和 main 函数是可执行程序的强制要求
Go 不允许用 go run 执行非 main 包,也不接受没有 func main() 的 main 包。这是硬性约束,不是风格建议。
-
package main必须是文件第一行(忽略空行和注释) -
func main()必须存在,且不能带参数、不能有返回值(签名必须是func()) - 如果误写成
func main(args []string)或func main() int,会报错cannot use ... as value of type func() - 多个
.go文件参与构建时,只要有一个是package main且含main函数即可,其余可为同包辅助文件
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
GO111MODULE 默认开启影响依赖查找路径
Go 1.16+ 默认启用模块模式(GO111MODULE=on),即使不在 $GOPATH 下也会尝试读取 go.mod。对 Hello World 这类无依赖项目,它通常静默工作;但若当前目录意外存在 go.mod,可能触发不必要的模块校验或代理请求。
- 最简做法:在空目录中新建
hello.go,不运行go mod init - 若已生成
go.mod且只想绕过模块机制,可临时设GO111MODULE=off go run hello.go(不推荐长期使用) - 检查当前模块状态:运行
go env GO111MODULE,输出应为on(正常) - 错误提示如
go: cannot find main module,往往是因为go.mod存在但内容损坏,删掉重试即可
Windows 下需注意 cmd / PowerShell 的换行与编码问题
用记事本保存 hello.go 时,若选了「UTF-8 with BOM」,Go 工具链可能解析失败,报错类似 syntax error: unexpected symbol 或直接跳过第一行。
立即学习“go语言免费学习笔记(深入)”;
- 推荐用 VS Code、Notepad++ 或
vim保存为纯UTF-8(no BOM) - PowerShell 中执行
go run hello.go若卡住无输出,先试cmd.exe排除 shell 兼容性干扰 - 路径含中文或空格一般不影响
go run,但某些旧版 Windows 杀软会拦截临时进程,表现为无输出也无错误
go.mod、换一个新目录、用不同编辑器保存后仍能立刻跑通。很多看似环境问题的故障,其实卡在文件编码、包声明位置或 shell 缓存上。










