如何构造多语言存储库以与golang合理协作?

如何构造多语言存储库以与golang合理协作?,go,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

我想创建一个具有少量语言绑定的库,其中一个是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还比较陌生,所以有人能告诉我这样的项目通常是如何组织的吗?

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

对于多部分项目,我个人倾向于建立一个新的组织,比如说
foo
,并为第一部分创建一个
bar
repo,比如用Java编写的服务器,然后可以通过。接下来,对于用Go编写的客户机,您将设置下一个repo baz,然后可以通过-your-Go模块访问它

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

imho,这种方法有多个优点:你让用户更容易探索生态系统,回购变得足够独立,同时仍然被组织捆绑在一起,单个回购变得更小