代码之家  ›  专栏  ›  技术社区  ›  lumo

用于微服务的Go模块

go
  •  0
  • lumo  · 技术社区  · 4 年前

    我正在开发多个微服务,它们需要不同的模块(应该像github上的模块一样可用,但是是私有的)

    我使用Go进行的第一次测试都位于一个包中,一段时间后会变得非常混乱

    我来自编程的Java端,有大量的包,可以让东西保持清晰和干净。

    (这也适用于github.com/xyz/module1 github.com/xyz/module2 github.com/xyz/module3等公共模块)

    我只需要这个专用模块-我怎么做?

    这就是我尝试过的:

    我的围棋来源目录:

     C:\my\path\to\go\src\
    

    在这个目录中,我有多个包含模块的子目录(实际上比这里列出的要多)

    my-module1 
    my-module2 
    my-module3
    

    我打电话给的每个文件夹 go mod init 但我得到的信息是

    package my-module1/util is not in GOROOT (c:\go\src\my-module1\util)
    

    这显然是对的,因为我的私人图书馆就在这里 C:\my\path\to\go\src\

    使用从github导入包 go get ... 工作正常(这些软件包将被加载但复制到 c:\go\src )

    使用一个文件夹中的所有文件可以工作,但不是理想的解决方案(我需要创建多个微服务,因此我希望能够使用自定义可执行文件和/或测试创建不同的项目)

    我做错了什么?

    如果需要更多的信息,我会提供给你——让我知道是什么 注意:不带go文件的软件包 package main 无法通过安装 go install .这个系统看起来让我很困惑-因为找不到模块。。。

    0 回复  |  直到 4 年前
        1
  •  0
  •   lumo    4 年前

    最后我创建了一个多模块

    意味着我有一个根文件夹(我们称之为 root )其中包含一个 go.mod 文件 这定义了 单元

    它需要我所有的子模块 它将绝对路径替换为相对路径。

    root
     * aa
     * ab
     * bc
    

    main被定义为

    module root
    
    go 1.15
    
    require (
     root/aa v0.0.0
     root/ab v0.0.0
     root/bc v0.0.0
    )
    
    replace (
     root/aa => ./aa
     root/ab => ./ab
     root/bc => ./bc
    )
    

    所有子模块都有一个非常简单的定义(这对所有子模块都是一样的,只要您没有任何依赖项)

    module root/aa