必须在go.mod所在目录执行go run,且GO111MODULE=on、GOPROXY=https://goproxy.cn,direct;否则会报“cannot find module”或下载卡死。

Go 项目不需要“虚拟环境”,也不依赖全局 GOPATH(1.16+ 默认开启模块模式),直接初始化就能跑起来——但错配 GO111MODULE 或漏设代理,go mod download 会卡死或报 module lookup failed。
go mod init 后为什么 go run 报 “cannot find module”
这是新手最常遇到的阻塞点:明明执行了 go mod init example.com/myapp,go run main.go 却提示找不到模块或包。
-
go.mod文件生成了,但当前目录不在模块根目录下(比如误在子目录执行go run);确认方式:pwd输出路径应与go mod init所在路径一致 -
GO111MODULE被手动关掉(如设为off),导致 Go 忽略go.mod;运行go env -w GO111MODULE=on强制启用 - 模块名用了非法字符(如含下划线
_或大写字母开头),虽不报错但后续go get可能失败;建议用小写字母 + 连字符,如my-go-service
国内环境下 go get 总是超时或 403
默认代理 proxy.golang.org 在国内不可达,且部分镜像(如 goproxy.io)已停服,必须显式配置可用代理。
- 推荐组合:
go env -w GOPROXY=https://goproxy.cn,direct(goproxy.cn稳定、支持私有模块回源) - 若公司内网需跳过代理的私有模块,
direct是必需的 fallback,不能省略 - 临时覆盖:在项目目录下执行
GOPROXY=https://goproxy.cn go get github.com/sirupsen/logrus,避免污染全局设置
main.go 编译后无法执行:no such file or directory
执行 go build 生成二进制,但直接 ./myapp 报错,常见于两类情况:
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
立即学习“go语言免费学习笔记(深入)”;
- 文件权限未设可执行:
chmod +x myapp(Linux/macOS);Windows 不需要此步 - 交叉编译目标平台不匹配:比如在 macOS 上
GOOS=linux go build,却试图在本地运行;检查file myapp输出的架构信息 - CGO_ENABLED=0 未设,而代码中用了 cgo 依赖(如 SQLite);若需纯静态链接,加
CGO_ENABLED=0再构建
vscode 调试 main.go 提示 “could not launch process: fork/exec … no such file or directory”
VS Code 的 Delve 调试器找不到 Go 二进制或工作目录错位,不是代码问题。
- 确保
.vscode/launch.json中"program"指向main.go的绝对路径,或留空让插件自动识别(推荐留空) - 检查 VS Code 终端里的
pwd是否等于项目根目录;调试启动前最好先go build一次,验证可执行性 - Delve 插件未安装或版本太旧:卸载重装
Go官方插件(非 “Go for Visual Studio Code” 等旧名插件)
真正卡住人的从来不是语法,而是模块路径、代理链路、文件权限这三个隐性环节;只要 go mod init 成功、go env -w GOPROXY 设对、go build 后 file 命令能看清目标平台,剩下的就是写逻辑了。

















