gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:19:39 27 4
gpt4 key购买 nike

我正在为具有多个用 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/
...

为了构建,我使用了一个 Makefile

  1. 将 lib/复制到 server/和 client/中
  2. 分别构建 server/和 client/,每次都将 GOPATH 设置到各自的目录。

它有效,但感觉真的很笨拙,并且与推荐的代码布局完全不同。

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

project/ (this is the repository root)
gospace/
src/
server/...
client/...
lib/...
client-ios/
...
client-android/
...

有了这个布局,我有一个单一的 GOPATH (gospace/),不需要笨拙的 Makefile。然而,组件并没有像第一个替代方案那样整齐地分开(即通过顶级目录)。

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

最佳答案

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

$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/
....

虽然 server/server.goclient/client.go 作为 package main 应该可以工作,但最好将它们分开您可以将客户端/服务器嵌入到其他项目中。

关于多平台多语言项目的Golang代码组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21615457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com