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

2 回复

结果发现,问题出在我代码中导入模块的方式上。

更多关于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,但实际的包导入路径需要包含具体的包目录。

回到顶部