Go 1.16+ 默认启用 Go Modules,go run main.go 可直接运行,无需配置 GOPATH 或特定项目结构;需验证 go version 和 go env,确保 PATH 正确,并设置 GOPROXY=https://goproxy.cn,direct。

Go 安装包下载安装后,go run 命令能直接运行 main.go,无需额外配置 GOPATH 或项目结构 —— 这是 Go 1.16+ 默认启用 Go Modules 后的核心变化。
验证安装是否成功:看 go version 和 go env
安装完成后别急着写代码,先确认命令行能识别 go:
- 打开终端(Windows 用 CMD/PowerShell,macOS/Linux 用 Terminal),输入
go version;若输出类似go version go1.21.0 darwin/amd64,说明二进制已正确加入PATH - 再执行
go env GOPATH,Go 1.16+ 默认不依赖GOPATH,但该值仍存在(通常为$HOME/go);你完全可以在任意目录下新建文件并运行,不用非得放在src子目录里 - 如果报错
'go' is not recognized(Windows)或command not found: go(macOS/Linux),说明安装路径没进PATH:Windows 检查是否勾选了 “Add to PATH”,macOS/Linux 检查/usr/local/go/bin是否已写入 shell 配置文件(如~/.zshrc)并执行source ~/.zshrc
go run main.go 是最简运行方式,但要注意文件名和包声明
新建一个空目录(比如 ~/hello-go),在里面创建 main.go,内容必须严格满足:
- 首行是
package main(不能写成package hello或漏掉) - 必须有
import "fmt"才能调用fmt.Println - 必须有
func main()函数,且拼写、括号、大括号全为英文符号 - 文件名必须是
.go后缀,且建议全小写(main.go、hello.go可行,Main.go或hello.Golang不行)
示例正确内容:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
保存后,在该目录下执行:go run main.go。注意不是 go run .(虽然也行,但初学者易混淆当前目录 vs 文件路径)。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
常见运行失败原因:错误信息直接暴露问题点
遇到报错时,别跳过第一行——Go 的错误提示非常直白:
-
package main is not a main package→ 文件里没有func main(),或包名不是main -
cannot find package "fmt"→ 极大概率是文件编码为 UTF-8 with BOM(尤其 Windows 记事本保存时默认带 BOM),换 VS Code 或 Goland 重存为纯 UTF-8 -
no required module provides package fmt→ 几乎不可能出现,因为fmt是标准库;若真出现,说明你误删了 Go 安装目录下的src/fmt,重装 Go 即可 -
exec: "gcc": executable file not found→ 仅在使用cgo时需要 GCC,纯fmt.Println场景不会触发;忽略此警告或安装 MinGW(Windows)/ Xcode command line tools(macOS)
代理配置(国内用户绕不开的一步)
哪怕只运行 Hello World,后续执行 go mod init 或引入第三方包时,go get 默认会访问 proxy.golang.org,国内无法连接。必须提前设好代理:
- 执行命令:
go env -w GOPROXY=https://goproxy.cn,direct - 验证是否生效:
go env GOPROXY应输出https://goproxy.cn,direct - 注意:
direct表示对私有域名(如公司内网 Git)不走代理,靠GOPRIVATE控制;个人开发阶段不需额外设GOPRIVATE
这步不做,后面第一次 go mod init 可能卡住几十秒甚至超时,但不影响 go run main.go 本身——因为 Hello World 不依赖外部模块。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










