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

Go同模块本地目录导入自定义包报错问题求助

问题分析与解决

核心问题

你的代码存在两个关键问题:

  1. 导入路径与目录结构不匹配:你导入的是github.com/mycompany/mycompany-go/mycompany,Go会默认在模块根目录下的mycompany子目录中寻找对应包,但你把something.go直接放在了模块根目录,没有这个子目录,所以Go找不到包。
  2. 库包与main包混放:模块根目录下同时存在mycompany库包文件(something.go)和main包文件(main.go),虽然Go语法允许,但不符合Go项目规范,还会导致后续发布模块时把main代码也打包进去。

解决方案

方案一:规范目录结构(推荐)

这是stripe-go、chargebee-go这类官方库的标准结构,库代码放在对应子目录,main代码单独存放:

  1. 在模块根目录创建mycompany子目录:
cd ~/Desktop/mycompany-go
mkdir mycompany
  1. 将something.go移动到mycompany子目录中:
mv something.go mycompany/
  1. (可选)把main.go移到cmd/example这类子目录(避免和库代码混放),此时main.go的导入路径保持不变:
// cmd/example/main.go
package main

import (
  "github.com/mycompany/mycompany-go/mycompany"
)

func main() {
  s := mycompany.Something{
    Title: "Example",
  }
}
  1. 运行测试:
go run cmd/example/main.go

方案二:直接使用模块根目录作为库包

如果不想创建子目录,可调整导入路径匹配根目录的包:

  1. 修改main.go的导入路径为模块本身的路径:
package main

import (
  "github.com/mycompany/mycompany-go"
)

func main() {
  s := mycompany.Something{
    Title: "Example",
  }
}
  1. 运行测试:
go run main.go

注意:这种方式不推荐,因为发布模块时会把根目录的main.go也包含进去,不符合库项目的发布规范。

为什么原提示不正确?

Go的错误提示是基于导入路径的常规逻辑——当找不到对应路径的包时,默认建议拉取远程模块,但你的情况是本地目录结构不匹配导入路径,而非缺少远程包,所以提示不符合你的实际场景。

内容的提问来源于stack exchange,提问作者collimarco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:15:29