Go 1.11+默认启用模块(Go Modules),无需配置GOPATH或手动创建src目录;只需正确配置PATH使go命令可用,并在项目根目录执行go mod init生成go.mod即可正常运行go run main.go。

Go 环境能跑 go run main.go 就算搭好了,不需要配 GOPATH 或手动建 src 目录 —— 这是 Go 1.11+ 默认启用 Go Modules 后的核心变化,老教程里那些“必须放 GOPATH/src 下”的说法已过时。
验证 go 命令是否可用,而不是只看安装成功
很多人执行 go version 有输出就以为万事大吉,但实际运行时却报 command not found 或 'go' is not recognized。根本原因是 PATH 没生效,或安装路径含空格/中文。
- Windows:检查
go是否在C:\Go\bin(默认路径),且该路径已加入系统环境变量Path;重启终端或命令提示符(不是仅关掉窗口再开,要彻底新建进程) - macOS/Linux:运行
which go,若无输出,说明/usr/local/go/bin(或你解压的路径下的bin)没加进PATH;编辑~/.zshrc(macOS Catalina 及之后默认 shell)或~/.bashrc,追加export PATH=$PATH:/usr/local/go/bin,再执行source ~/.zshrc - 常见坑:
C:\Program Files\Go\bin这种带空格的路径在旧版 Windows PowerShell 中可能失效;D:\学习\go\bin这类含中文路径会导致go mod下载失败或工具链崩溃
初始化项目用 go mod init,别硬套 GOPATH 结构
现在新建项目,直接在任意空文件夹下运行 go mod init example.com/hello 即可,example.com/hello 是模块名(不一定要真实域名,只是命名空间),它会生成 go.mod 文件。后续所有依赖管理、构建、测试都基于此模块根目录进行。
-
go mod init后,main.go里的package main就能正常编译,无需把文件塞进%GOPATH%/src/xxx - 如果误删了
go.mod,go run可能报错no required module provides package—— 这不是代码问题,是模块上下文丢失,重跑go mod init即可 - 模块名不影响运行,但影响
go get引入本地包时的导入路径,例如import "example.com/hello/utils"要求utils在./utils子目录下
写并运行第一个控制台程序:go run vs go build 的区别
go run main.go 是开发调试最常用方式,它编译后立即执行,不生成文件;go build 则生成可执行文件,适合分发或部署。两者对 main 包和 func main() 的要求完全一致。
立即学习“go语言免费学习笔记(深入)”;
- 确保
main.go内容是标准结构:package main开头,有且仅有一个func main() { ... } - Windows 下
go build默认生成main.exe;Linux/macOS 生成main(无后缀),直接./main运行 - 如果
go run报错undefined: fmt,说明import "fmt"缺失或拼错成imort—— Go 不自动导入标准库,每一行import都必须显式声明 - 想快速测试修改:保存
main.go后,在终端直接敲go run .(点号代表当前模块根目录),比写全路径更安全,尤其当文件名不是main.go时
真正容易被忽略的是代理配置 —— 如果你在国内,go get 或首次 go run 依赖第三方包时大概率卡住或报 timeout,这不是环境问题,而是模块代理没设。执行 go env -w GOPROXY=https://goproxy.cn,direct 一行搞定,无需改 shell 配置文件。


















