模块路径必须与私有仓库https地址完全一致(如git.company.com/team/utils),去掉.git后缀、全小写、无下划线;否则go get失败、ide无法跳转;初始化后需立即go mod tidy验证,且发布前不可含replace本地路径。

直接用 go mod init 初始化模块路径,必须匹配企业私有仓库地址(如 git.company.com/team/utils),否则其他项目 go get 会失败。
模块路径怎么写才对
模块路径不是项目本地目录名,而是未来被别人 go get 时用的导入路径。写错会导致:go get git.company.com/team/utils 报 “not found”,或者 IDE 无法跳转、自动补全失效。
- 正确写法:跟 Git 仓库 HTTPS 地址一致,去掉
.git后缀,全部小写,不用下划线,例如git.company.com/team/httpclient - 错误写法:
utils、./utils、company-utils、Git.Company.Com/Team/Utils - 如果用 SSH 地址(如
git@git.company.com:team/utils.git),仍应统一按 HTTPS 格式写模块路径,避免工具链解析不一致 - 初始化后立刻运行
go mod tidy,确认go.mod中的module行与你预期的导入路径完全一致
私有仓库如何让 go get 正常工作
默认 go get 只信任 HTTPS 公共代理,访问企业内网 Git 时会卡在“fetching”或报 unrecognized import path。
Colly 是一个用于 Go 语言的快速开源爬取和爬虫框架。它适用于从简单的页面提取到异步爬虫处理大量页面集合,支持请求回调和结构化解析。
- 方案一(推荐):设置
GOINSECURE=git.company.com,让 Go 跳过 TLS 验证(仅限内网可信环境) - 方案二:配置 Git 凭据,让
go get复用git config --global credential.helper的认证信息 - 方案三:通过
GOPROXY搭建内部代理(如 Athens),但中小团队通常没必要,先走前两种 - 验证方式:在另一个空目录下执行
go mod init test && go get git.company.com/team/utils@latest,成功即通
internal/ 和 pkg/ 怎么选
公共库对外暴露什么,决定了目录结构。误用 internal/ 会让别人根本 import 不进去;滥用 pkg/ 又会让边界模糊、演变成“万能工具包”。
- 如果你的库是纯工具集(比如通用校验、加解密、HTTP 封装),所有代码都该放在
pkg/下,例如pkg/validator、pkg/aes,并确保每个子包有明确职责和文档 - 如果你的库含一部分仅供内部服务调用的实现(比如某 SDK 的底层连接池管理),才把这部分放进
internal/;但注意:internal/下的包永远无法被外部项目 import,哪怕路径写对也不行 - 别把整个库塞进
internal/—— 那等于没发布,只是本地复用 - 导出符号命名要克制:只暴露接口和构造函数,比如
NewClient(),不导出具体 struct 或私有字段
打 tag 前必须检查的三件事
发布 v1.0.0 不是改完 go.mod 就 push tag,Go Modules 对版本有隐式契约。
- 确保
go.mod里没有replace指向本地路径(如replace git.company.com/team/utils => ../utils),否则别人拉取时会找不到目标 - 运行
go build ./...确认所有子包可编译,尤其注意pkg/下各包是否都能独立go test - tag 名必须符合 SemVer,且带
v前缀:v1.0.0✅,1.0.0❌,release-v1❌
最后提醒:模块路径一旦发布就很难改。哪怕只是临时测试,也建议一开始就用最终域名,别用 example.com 占位——改路径意味着所有下游项目都要同步改 import 语句,成本远高于初期多敲几个字母。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










