【问题标题】:Module name works improperly模块名称工作不正常
【发布时间】:2021-01-18 20:10:00
【问题描述】:

有一个私有的git站点,地址为gitlab.myownsite.com,文件夹结构为:

/common
    |___ /libs
           |___ /lib_a
                  |__ lib_a.mod
/somethingelse

请注意,这不是单个项目的文件夹结构,它是gitlab.myownsite.com 的结构,其中包含许多repo。比如我用Go写了一个库lib_a,然后在路径gitlab.myownsite.com/common/libs/lib_a创建了一个repo,它的模块名是:

module gitlab.myownsite.com/common/libs/lib_a

但是,这个命名违反了github.com/username/reponame的命名规则,导致另一个项目使用了我的lib_a by:

import "gitlab.myownsite.com/common/libs/lib_a"

错误解析导入gitlab.myownsite.com/common/libs.git的子包lib_a,common被识别为username,libs为reponame,lib_a为包名。 go mod 报错:

repository 'https://gitlab.myownsite.com/common/libs.git/' not found

我无法更改这个私有gitlab站点的文件夹结构,如何解决这个问题?

我的 go 模块 env 有:GOPRIVATE=gitlab.myownsite.com

【问题讨论】:

  • 你有多个模块吗? go.mod 文件在哪里?
  • 这个 gitlab 很多人共享。 lib_x 是独立项目,但是它们有相同的父文件夹
  • lib_a.modlib_b.mod 是什么?它们与你的 Go 代码有什么关系?你的意思是把go.mod 文件放在这些位置,还是别的什么?
  • 我不确定您的评论是否旨在解决@icza 的问题,但事实并非如此。你有多个模块吗? go.mod 文件在哪里?
  • 确保您的 gitlab 提供必要且相关的导入元标头。阅读golang.org/cmd/go/#hdr-Remote_import_paths。请注意,您认为存在某种“github.com/username/reponame 的命名规则”的假设是完全错误的。哪有这回事。 go 工具知道一些代码托管站点,所有其他站点(尤其是您的 Gitlab 实例)必须提供 <meta name="go-import" content="example.org git https://code.org/r/p/exproj"> 响应。无需更改任何文件夹布局。

标签: go go-modules


【解决方案1】:

感谢@Volker 指出,当 go get execute 时响应的元信息描述了路径的哪一部分是 repo(.git)。不幸的是,gitlab 有a bug on it。我正在搜索replace trick 可以避免这个问题。或者,不得已,重新构建 gitlab 路径

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2021-12-23
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多