如何构建多语言存储库以与golang合理地工作?

时间:2019-10-19 07:35:23

标签: go

我想建立一个几乎没有语言绑定的库,其中之一就是golang。将所有内容都放在一个存储库中是有意义的,因为例如可以在它们之间共享测试数据。但是我不确定如何组织它。我尝试过的是

+   $ tree .
.
└── go
    ├── go.mod
    └── foo.go

1 directory, 2 files

+   $ cat go/go.mod
module github.com/bar/foo/go

go 1.13

+   $ cat go/foo.go
package foo

func Foo() int {
    return 1;
}

然后我尝试使用它

+:( $ cat test.go
package main

import (
    "github.com/bar/foo/go"
)

func main() {
    fmt.Println(foo.Foo())
}

但是失败了

+   $ go run ./test.go
go: finding github.com/bar/foo latest
build command-line-arguments: cannot load github.com/bar/foo/go: module github.com/bar/foo@latest (v0.0.0-20191019071519-05aedbdfa600) found, but does not contain package github.com/bar/foo/go

我刚接触过golang,所以有人可以建议这样的项目通常是如何组织的吗?

1 个答案:

答案 0 :(得分:2)

首先,在大多数情况下,以编程语言命名软件包是个坏主意。包裹实际上是做什么的?请记住,文档和程序包的布局应针对用户进行优化。

对于多部分项目,我个人倾向于建立一个名为foo的新组织,并为第一部分(例如用Java编写的服务器)创建一个bar回购。通过https://github.com/foo/bar。接下来,对于用Go编写的客户端,您需要设置下一个仓库,然后可以通过https://github.com/foo/baz-您的go模块进行访问。

最后但并非最不重要的一点是,您可以拥有一个“分发”存储库,该存储库将组织的项目通过CI管道放置,以确保互操作性。

这种方法有很多优点,恕我直言:您使用户更容易探索生态系统,存储库变得足够独立,同时仍被组织捆绑在一起,单个存储库变得更小。