go 1.16+ 默认启用 go111module=on,无需配置 gopath;关键是要确保 go111module=on 且 go mod init 的模块路径与 import 路径严格一致,否则会报 cannot find module providing package 等错误。

Go 语言环境搭建本身不难,但初学者常卡在 GOPATH 和 GO111MODULE 的冲突、go install 找不到命令、或者 go run 报 command not found 上——这些问题根本不是“没装好”,而是环境变量和模块模式没对齐。
确认 Go 安装路径和 $PATH 是否生效
很多人执行 go version 成功就以为装好了,但后续 go install 出来的二进制找不到。这是因为 Go 默认把编译产物放在 $GOPATH/bin(旧模式)或 $HOME/go/bin(新默认),而这个路径没加进 $PATH。
- 运行
go env GOPATH看输出,记下路径(比如/home/you/go) - 检查
$PATH是否包含$GOPATH/bin:执行echo $PATH | grep bin - 如果没出现,临时加进去:
export PATH=$PATH:$GOPATH/bin;永久生效要写进~/.bashrc或~/.zshrc - 注意 macOS M1/M2 用户若用 zsh,别漏掉
source ~/.zshrc
GO111MODULE=on 是默认,但旧项目可能依赖 GOPATH
Go 1.16+ 默认开启模块模式(GO111MODULE=on),此时 go get、go install 都走模块,不再读 GOPATH/src。但很多老教程仍按旧方式教,导致 go get github.com/xxx/yyy 下载后无法 import。
- 查当前模式:
go env GO111MODULE,输出应为on - 想强制用模块模式(推荐):不用改,默认就行;想退回到 GOPATH 模式?设
GO111MODULE=off(不建议) - 新建项目时,先
mkdir myapp && cd myapp && go mod init myapp,否则go run可能报no required module provides package - 如果
go install报cannot find module providing package,说明没在模块根目录下执行,或没go.mod
go install 命令行为变了,必须带版本后缀
Go 1.17+ 起,go install 不再支持无版本的包引用,比如 go install github.com/golangci/golangci-lint/cmd/golangci-lint 会失败。
- 正确写法是加
@latest或具体版本:go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest - 也可以先
go get再go install,但更推荐直接go install ...@latest - 如果提示
invalid version: unknown revision,说明该仓库没打 tag,可试@master或@main(取决于默认分支名) - 安装完记得验证:
golangci-lint --version,而不是只看命令是否返回成功
最常被忽略的是:go mod 和 $GOPATH 并存时,Go 会优先按模块规则找依赖,但 go build 仍可能因 import 路径写错(比如漏了 github.com/ 前缀)而报错——这跟环境无关,是代码本身问题。别一出错就重装 Go,先 go list -m all 看模块状态,再 go build -x 看实际执行了什么。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











