You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go模块go.mod在子文件夹时,如何正确导入其子包?

问题原因

你的Go模块的go.mod文件放在apps目录而非仓库根目录,导致模块的实际路径是github.com/zhaoyi0113/test-go-module/apps,而非你以为的根路径github.com/zhaoyi0113/test-go-module。之前执行go get github.com/zhaoyi0113/test-go-module@0.0.2成功,是因为Go会自动将无go.mod的仓库根目录视为一个空模块,但这个根模块并不包含apps/logger子包——该子包属于apps目录下的模块。

解决方案

方案一:调整模块到仓库根目录(推荐)

这是Go模块的标准结构,能避免路径混淆:

  • 将apps目录下的go.mod文件移动到仓库根目录
  • 修改根目录go.mod中的module声明为:
    module github.com/zhaoyi0113/test-go-module
    
  • 重新给仓库打版本tag(比如v0.0.3),并推送到GitHub
  • 在使用该模块的项目中执行:
    go get github.com/zhaoyi0113/test-go-module@v0.0.3
    
  • 保持原导入路径github.com/zhaoyi0113/test-go-module/apps/logger即可正常编译

方案二:保留现有结构,正确引用子模块

如果不想调整目录结构,需要按实际模块路径操作:

  • 给apps目录下的模块打版本tag(遵循Go子模块tag规则,格式为apps/v0.0.2),推送到GitHub
  • 在使用项目中执行:
    go get github.com/zhaoyi0113/test-go-module/apps@v0.0.2
    
  • 原导入路径github.com/zhaoyi0113/test-go-module/apps/logger即可正常使用,因为此时Go能识别该包属于github.com/zhaoyi0113/test-go-module/apps模块下的子包

内容的提问来源于stack exchange,提问作者Joey Yi Zhao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:20:33