Golang私有仓库出现module存在但无法找到package的错误
Golang私有仓库出现module存在但无法找到package的错误
我正在尝试导入一个托管在GitLab上的私有仓库。我已经设置了~/.git-credentials文件,并且通过HTTPS进行git克隆是可行的(它不暴露SSH访问权限)。我还通过代理访问,并且已经设置了操作系统的代理环境变量。下载公共包没有问题。
我尝试了以下方法:
获取包
$ go version
go version go1.13.4 darwin/amd64
$ $ GOPRIVATE="gitlab.example.com" go get -v -u gitlab.example.com/myapp/shared-lib
get "gitlab.example.com/myapp/shared-lib": found meta tag get.metaImport{Prefix:"gitlab.example.com/myapp/shared-lib", VCS:"git", RepoRoot:"https://gitlab.example.com/myapp/shared-lib.git"} at //gitlab.example.com/myapp/shared-lib?go-get=1
go: finding gitlab.example.com/myapp/shared-lib latest
// 确认它没有静默失败
$ echo $?
然而,当我运行go vet命令时,我得到了以下错误:
$ go vet
go: finding gitlab.example.com/myapp/shared-lib latest
build gitlab.example.com/myapp/ssp-atlassian-crowd-adaptor: cannot load gitlab.example.com/myapp/shared-lib: module gitlab.example.com/myapp/shared-lib@latest found (v0.0.0-20200223205832-a873abe3e57b), but does not contain package gitlab.example.com/myapp/shared-lib
我可以看到包已经被下载到$GOPATH/pkg/mod/gitlab.example.com/myapp/shared-lib:
ls -la $GOPATH/pkg/mod/gitlab.example.com/myapp/shared-lib
shared-lib.git@v0.0.0-20200223205832-a873abe3e57b/ shared-lib@v0.0.0-20200223205832-a873abe3e57b/
在ssp-golib@v0.0.0-20200223205832-a873abe3e57b/目录内(根据上面的错误信息),.go文件存在于pkg目录中:
$ ls -la $GOPATH/pkg/mod/gitlab.service.proteuscdnetwork.com/wolfpack/ssp-golib@v0.0.0-20200223205832-a873abe3e57b/
total 32
dr-x------ 6 x staff 204 5 Mar 13:28 .
drwxr-xr-x 4 x staff 136 8 Mar 19:40 ..
-r--r--r-- 1 x staff 13 5 Mar 13:28 README.md
-r--r--r-- 1 x staff 246 5 Mar 13:28 go.mod
-r--r--r-- 1 x staff 6520 5 Mar 13:28 go.sum
dr-xr-xr-x 4 x staff 136 5 Mar 13:28 pkg
我能得到一些关于为什么这可能失败的提示,或者关于正确操作方法的指导吗?
更多关于Golang私有仓库出现module存在但无法找到package的错误的实战教程也可以访问 https://www.itying.com/category-94-b0.html
结果发现,问题出在我代码中导入模块的方式上。
更多关于Golang私有仓库出现module存在但无法找到package的错误的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这是一个典型的Go模块路径与包路径不匹配的问题。错误信息明确指出模块已找到,但该模块不包含指定的包。问题在于你的模块声明和导入路径不一致。
首先检查你的shared-lib模块的go.mod文件:
// shared-lib/go.mod 应该包含:
module gitlab.example.com/myapp/shared-lib
go 1.13
然后检查你的主项目中是如何导入的。如果你在代码中这样导入:
import "gitlab.example.com/myapp/shared-lib"
但shared-lib模块内部的实际包结构可能是不同的。例如,如果shared-lib模块内部有子包:
// 假设 shared-lib 模块结构如下:
// shared-lib/
// go.mod
// pkg/
// subpackage/
// subpackage.go
// 那么你应该这样导入:
import "gitlab.example.com/myapp/shared-lib/pkg/subpackage"
或者如果shared-lib模块的根目录没有.go文件,只有子目录包含包:
// 检查 shared-lib 模块的实际结构:
$ find $GOPATH/pkg/mod/gitlab.example.com/myapp/shared-lib@v0.0.0-20200223205832-a873abe3e57b -name "*.go"
根据你提供的目录结构,shared-lib模块似乎只包含pkg目录。这意味着你需要导入具体的子包,而不是模块根路径。例如:
// 如果 pkg 目录下有具体的包,比如 utils:
import "gitlab.example.com/myapp/shared-lib/pkg/utils"
如果shared-lib模块确实应该在根目录提供包,那么需要在模块根目录添加.go文件:
// shared-lib/sharedlib.go
package sharedlib
// 你的代码...
然后在主项目中导入:
import "gitlab.example.com/myapp/shared-lib"
检查你的导入语句是否与模块的实际包结构匹配。模块路径(在go.mod中定义)是gitlab.example.com/myapp/shared-lib,但实际的包导入路径需要包含具体的包目录。

