go mod init 前必须清理 vendor/ 和避免在 $GOPATH/src 下执行,否则模块路径推导错误、依赖缺失或 import 失败;需显式指定合法模块路径并确保 GO111MODULE=on。

go mod init 之前必须清理 vendor/ 和 GOPATH/src 干扰
很多人在新建项目时执行 go mod init 后发现 go.mod 里 module 名不对、依赖没拉下来,甚至提示 “cannot find module providing package”,根本原因不是命令错了,而是当前目录残留了旧时代产物。
- 删掉项目根目录下的
vendor/目录(除非你明确要用 vendor 锁死依赖) - 别在
$GOPATH/src下初始化新模块——Go 会试图按旧路径推导 module 名,比如github.com/yourname/project变成yourname/project,后续 import 路径全错 - 运行
go env -w GO111MODULE=on强制启用模块模式(Go 1.16+ 默认开启,但 CI 或某些 shell 环境可能被关掉) - 验证:执行
go list -m,应输出example.com/xxx这类显式 module 名,而不是(main)
VS Code 里 gopls 启动失败的三个硬性前提
gopls 不是装上插件就自动好用的,它严格依赖底层环境一致性。常见“标红”“no workspace packages”“反复崩溃”,90% 是卡在这三件事上。
- 项目根目录必须有
go.mod文件(没有就go mod init example.com/foo) -
go命令本身得能调用——在终端里which go或Get-Command go必须返回路径,否则 VS Code 插件找不到工具链 - 关闭干扰项:
go.gopath设置为null(VS Code 设置里搜这个 key),否则它会绕过模块模式去$GOPATH/src扫包
国内环境下 GOPROXY 和 GOSUMDB 必须配对设置
不设代理不是“慢一点”,而是直接失败:go get 卡住、go mod download 报 checksum mismatch、gopls 初始化超时。这不是网络问题,是 Go 默认校验策略和境外源之间的硬冲突。
Colly 是一个用于 Go 语言的快速开源爬取和爬虫框架。它适用于从简单的页面提取到异步爬虫处理大量页面集合,支持请求回调和结构化解析。
- 全局设代理:
go env -w GOPROXY=https://goproxy.cn,direct - 开发机可关校验:
go env -w GOSUMDB=off;CI/生产环境必须保留GOSUMDB=sum.golang.org或自建服务 - 验证是否生效:
go env GOPROXY输出含goproxy.cn,且go list -m all能秒出结果 - 企业内网需加私有代理时,格式为
https://goproxy.cn,https://intranet.example.com
调试断点不命中?检查编译参数和 launch.json 的 program 字段
VS Code 按 F5 启动调试,dlv 进程一闪而过或断点灰显,基本不是代码问题,而是构建环节没对齐。
立即学习“go语言免费学习笔记(深入)”;
- 编译时必须加
-gcflags="all=-N -l":禁用优化和内联,否则变量不可见、断点偏移 -
launch.json中program字段必须指向可执行文件(如"./hello"),不能写"./main.go" - 如果用
dlv dap模式,mode必须显式设为"exec"或"test",别用"auto" - 验证:终端里手动跑
go build -gcflags="all=-N -l" -o hello . && dlv exec ./hello,看能否正常停在 main 入口
PATH 或 GOENV 失效。每次遇到“命令找不到”或“模块不识别”,第一反应不该是重装 Go,而是先跑一遍 which go、go env GOPROXY、go list -m —— 环境变量比代码更爱悄悄失效。

















