登录
首页 >  Golang >  Go问答

在Go服务中如何引入monorepo中的包?

来源:stackoverflow

时间:2024-02-20 18:00:26 155浏览 收藏

golang学习网今天将给大家带来《在Go服务中如何引入monorepo中的包?》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

我有一个单一存储库。假设它是 github.com/myself/monorepo。我里面有两个服务:service-oneservice-two。每个都有一个 go.mod 文件。

service-one 中,我有一个要导入的类型:

package service-one

type structone {

}

我从 service-two 导入它:

package service-two

import pack "github.com/myself/monorepo/service-one"

func myfunc() {
    var v pack.structone
}

service-two go.mod 文件中我尝试了两个选项:

引用分支上的临时提交:

require github.com/myself/monorepo/service-one 38e00c33c01a9ac17c177ba25e9764c4d1c1310f

引用 master 上的标记提交

require github.com/myself/monorepo/service-one v0.0.0

两次我都收到如下错误:

not found: github.com/myself/monorepo/[email protected] invalid version: git ls-remote -q origin in /tmp/gopath/pkg/mod/cache/vcs/...
   fatal: could not read Username for 'https://github.com': terminal prompts disabled

我应该如何正确安排存储库?我做错了什么?


正确答案


致命:无法读取“https://github.com”的用户名:终端提示已禁用

如果这是私有存储库,您应该:

  1. 设置 GOPRIVATE=github.com/myself/monorepo,这样它就不会尝试从代理服务器下载。
  2. 确保 git 不需要交互式输入密码。例如,使用凭据助手来存储凭据。

但在此之前,问问自己为什么要创建两个模块。如果没有充分的理由,请创建一个包含多个包的单个模块。

如果您必须使用多个模块,请利用工作区来简化本地开发。请参阅教程:多模块工作区入门

请注意,存储库内子目录中定义的模块具有不同的标记。请参阅将版本映射到提交

如果模块定义在存储库内的子目录中,即模块路径的模块子目录部分不为空,则每个标记名称必须以模块子目录为前缀,后跟斜杠。例如,模块 golang.org/x/tools/gopls 定义在存储库的 gopls 子目录中,根路径为 golang.org/x/tools。该模块的 v0.4.0 版本必须在该存储库中具有名为 gopls/v0.4.0 的标签。

您的问题还有另一个问题:

需要 github.com/myself/monorepo/service-one 38e00c33c01a9ac17c177ba25e9764c4d1c1310f

您不应该像这样手动将提交 ID 放入 go.mod 文件中。运行以下命令,Go工具会将其翻译为伪版本并为您更新go.mod。请参阅伪版本

  • go 获取 github.com/myself/monorepo/service-one@38e00c33c01a9ac17c177ba25e9764c4d1c1310f
  • go 获取 github.com/myself/monorepo/service-one@master

今天关于《在Go服务中如何引入monorepo中的包?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>