用于多平台多语言项目的Golang代码组织

hen*_*g77 6 code-organization project-organization organization go

我正在为一个多平台项目寻找一个好的项目组织,其中包含用Go编写的多个组件.我知道http://golang.org/doc/code.html推荐的布局,但是布局建议似乎不符合我的要求.

项目组成部分是:

  • 服务器(用Go编写)
  • 客户端,跨平台(Go)
  • 库,在服务器和客户端之间共享(Go)
  • 更多客户(iOS,Android)

我的要求是:

  • 单个git存储库中的所有组件
  • 保持组件分离(例如,每个组件一个目录)
  • Go组件可以构建为多个子包

我目前的做法:

project/ (this is the repository root)
  server/
    server.go (package main)
    src/          
      server/
        package1/
          package1.go
        ...
  client/
    client.go (package main)
    src/
      client/
        package2/
          package2.go
        ...
  lib/
    src/
      lib/
         lib.go
         ...
  client-ios/
    ...
  client-android/
    ...
Run Code Online (Sandbox Code Playgroud)

要构建,我使用Makefile

  1. 将lib /复制到server /和client /
  2. 分别构建服务器/和客户端/,每次都将GOPATH设置到相应的目录.

它有效,但感觉非常笨重,与推荐的代码布局完全不同.

这是我正在考虑的替代方案:

project/ (this is the repository root)
  gospace/
    src/
      server/...
      client/...
      lib/...
  client-ios/
    ...
  client-android/
    ...
Run Code Online (Sandbox Code Playgroud)

有了这个布局,我有一个GOPATH(gospace /),不需要klunky Makefile.然而,组件不像第一替代方案那样整齐地分离(即,通过顶级目录).

我的问题:哪种项目布局最适合我的要求和Go约定和工具支持?有没有更好的选择,我还没有看到?

One*_*One 6

这就是我组织类似项目的方式:

$GOPATH/src/project-root/
    lib.go
    lib_test.go

    server/
        server.go
        server_test.go

        main/
            server.go // package main; import "project-root/server"

    client/
        client.go
        client_test.go

        main/
            client.go //package main; import "project-root/client"

    client-ios/
        ....

    client-android/
        ....
Run Code Online (Sandbox Code Playgroud)

虽然大多有server/server.goclient/client.go作为package main应该工作,最好还是分开吧,所以你可以嵌入在其他项目中的客户机/服务器.