Go包开发如何设计目录结构并解决测试导入路径矛盾?
导入路径矛盾解决方案
Go 模块系统原生支持本地开发时直接使用正式的远端发布路径,无需提前将代码推送到远端:
只要你项目根目录 go.mod 首行声明的模块名是 github.com/mylogin/mypackage,Go 工具链查找依赖时会优先匹配本地模块内的代码,不会主动请求远端仓库。你在测试文件中直接导入 github.com/mylogin/mypackage 即可正常使用本地开发的代码,待后续推送到 GitHub 后,外部开发者和 CI/CD 流程使用同样的导入路径也能正常拉取远端代码,两者完全兼容无需额外修改。
推荐的项目文件布局
当前你单独建立 tests 目录存放测试文件不符合 Go 社区惯例,常规场景下测试文件需要和对应源码放在同一级目录下:
mypackage/ ├── mypackage.go // 源码文件,包名为 mypackage ├── mypackage_test.go // 测试文件,可选两种包名: // 1. 包名 mypackage:包内测试,可直接调用包内小写开头的未导出成员 // 2. 包名 mypackage_test:外部测试,模拟外部用户导入包的场景,只能调用导出成员 ├── go.mod └── go.sum // 安装依赖后自动生成
如果确实需要单独存放集成测试类的跨包测试代码,可以保留 tests 目录,目录内的测试文件直接导入 github.com/mylogin/mypackage 即可正常运行。
额外注意:mypackage.go 中定义的函数如果需要对外暴露给导入方使用,必须首字母大写,小写开头的函数仅支持包内访问。
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

