使用共享代码转到两个应用程序的文件组织

时间:2016-09-02 09:56:56

标签: go

我有一个共享一些代码的客户端和服务器应用程序。我想将它们全部分组到git控件下的一个目录中。

在这个目录中,我可以创建两个子目录,一个用于客户端,另一个用于服务器。编译后的代码将具有所提供目录的名称,我在其各自的目录中使用go install编译它们。

目前还不清楚如何处理我不想在每个存储库中复制的共享代码(.go文件)。

我需要创建一个单独的包吗?这个包可以存储在公共根目录中吗?

编辑1 :这是一个让问题清晰的例子

目录 thing 用于项目。它包含 thingClient thingServer 目录,其中包含客户端和服务器特定的go文件。

客户端和服务器使用存储在特定文件中的常用功能。我希望这些公共文件存储在... / go / src / thing中,以便它们保留在同一个git存储库中。我不希望它们被编译成共享库。

.../go/src/thing <-- under git control .../go/src/thing/thingClient <-- contains main.go of client .../go/src/thing/thingServer <-- contains main.go of server .../go/src/thing/ ??? <-- contains go files used by client and server 如果可能的话,我宁愿避免创建包含这些公共文件的包。

编辑2 :根据此文档How to Write Go Code我必须创建一个包含共享代码的包,并将其导入客户端和服务器代码中。该包将存储在名为.../go/src/thing/common的特定目录中。 common中的所有go文件都应该声明为名为 common 的包的成员。然后,客户端和服务器源文件应import thing/common来访问共享源代码。

另一个重点是项目目录。为避免程序包名称冲突,应使用具有唯一域名的路径等URL重命名项目目录,例如, “github上/用户/东西”。这样可以避免任何碰撞。然后,项目源文件应存储在.../go/src/github/user/thing/...下。然后客户端和服务器应该导入“github / user / thing / common”。

1 个答案:

答案 0 :(得分:2)

根据这一点,How to Write Go Code创建一个包含共享代码的包,并将其导入客户端和服务器代码中。

包可以存储在一个名为例如... / go / src / thing / common的特定目录中。 common中的所有go文件都应该声明为名为common的包的成员。然后,客户端和服务器源文件应导入thing / common以访问共享源代码。

为避免程序包名称冲突,可以使用具有唯一域名的路径等URL重命名项目目录,例如: “github.com/user/thing”。这样可以避免任何碰撞。项目源文件可以存储在... / go / src / github.com / user / thing / ....

然后客户端和服务器可以导入“github.com/user/thing/common”。

如果github.com/user/thing下没有源文件,您可以创建一个新的空文件,其中只包含一个包名称,以便this到达1.8