我有一个共享一些代码的客户端和服务器应用程序。我想将它们全部分组到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”。
答案 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