为了账号安全,请及时绑定邮箱和手机立即绑定

Go项目目录结构中如何组织和分解服务?

Go项目目录结构中如何组织和分解服务?

Go
喵喵时光机 2023-07-17 16:18:18
假设我有一个通过 API 与 Github 通信以创建和修改存储库的服务。函数列表可能如下所示。对 API 发出的每个请求都有几个移动部分,因此我将其分成多个函数// github_service.gopackage main// :show (GET) functionsfunc findGithubRepository(...)func findGithubRepositoryRequestBuilder(...)func findGithubRepositoryUrl(...)// :create (POST) functionsfunc createGithubRepository(...)func createGithubRepositoryPayload(...)func createGithubRepositoryRequestBuilder(...)func createGithubRepositoryUrl(...)// :update (PUT) functionsfunc updateGithubRepository(...)func updateGithubRepositoryPayload(...)func updateGithubRepositoryRequestBuilder(...)func updateGithubRepositoryUrl(...)// Helpers used by above functionsfunc queryGithub(...)func GithubHostName(...)这种布局有两个问题 -所有内容都在一个名为 的大文件中github_service.go,我不知道如何将其拆分。它应该位于较小的子目录中吗services/github/update_service.go?一般来说,如何在一个简单的项目中组织这样的服务(例如命令行实用程序)由于所有这些都在同一个 Go 包中,因此名称必须是唯一的。所以我有命名空间所有带有操作和上下文的函数(例如findGithubRepositoryUrl()而不是url())。每个都应该在单独的包下吗?。但他们如何分享共同的帮手呢?谢谢!
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

对此有多种解决方案。

  • 您可以将所有函数保存在同一个包中的不同文件中。您必须使用详细的名称。

  • 您可以为每个资源创建一个结构,并为其定义一组函数:

type GithubRepository struct  {}


func (g GithubRepository) find() {}

func (g GithubRepository) create() {}


type GithubRepositoryPayload struct {}


func (g GithubRepositoryPayload) find() {}

func (g GithubRepositoryPayload) create() {}

...

这也可以为处理程序提供访问通用功能或变量的方法。您可以使用这些创建一个基本结构并将其嵌入到所有处理程序结构中。


查看完整回答
反对 回复 2023-07-17
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

为了使项目简单并最大程度地减少文件的多次导入,请将所有文件保存在具有不同文件名的同一包下。示例(假设为 testService):


repoName: testService

folder structure

  1.testService(Dir)

    2.routes.go

    2.commons.go

    2.handler.go

    2.models.go

    2.utils.go

  1.main.go

  1.Dockerfile

这里数字1代表同级,2代表服务目录下的文件


查看完整回答
反对 回复 2023-07-17
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

  1. 您可以使用此结构来组织您的项目


  • 如果文件位于同一个包中,则函数名称必须不同。

  • 您可以创建名为“helpers”的包并从任何其他包中使用。(不要忘记配置GOPATH环境变量)

我已经创建了一个具有此结构的存储库,您可以克隆它并将其用作模板。我希望我有所帮助:)


查看完整回答
反对 回复 2023-07-17
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信