gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:38 24 4
gpt4 key购买 nike

假设我有一项服务可通过 API 与 Github 通信以创建和修改存储库。

函数列表可能如下所示。

对 API 发出的每个请求都有几个移动部分,因此我将其拆分为多个函数

// github_service.go

package main

// :show (GET) functions
func findGithubRepository(...)
func findGithubRepositoryRequestBuilder(...)
func findGithubRepositoryUrl(...)

// :create (POST) functions
func createGithubRepository(...)
func createGithubRepositoryPayload(...)
func createGithubRepositoryRequestBuilder(...)
func createGithubRepositoryUrl(...)

// :update (PUT) functions
func updateGithubRepository(...)
func updateGithubRepositoryPayload(...)
func updateGithubRepositoryRequestBuilder(...)
func updateGithubRepositoryUrl(...)


// Helpers used by above functions
func queryGithub(...)
func GithubHostName(...)

这个布局有两个问题——

  1. 所有内容都在一个名为 github_service.go 的大文件中,我不确定如何拆分它。 它应该放在较小的子目录中,例如 services/github/update_service.go 吗?一般来说,如何在一个简单的项目(例如命令行实用程序)中组织这样的服务)

  2. 因为所有这些都在同一个 Go 包中,所以名称必须是唯一的。因此,我将所有函数与操作和上下文命名空间(例如,findGithubRepositoryUrl() 而不是 url())。 每个都应该放在一个单独的包中吗?。但他们将如何共享共同的助手?

谢谢!

最佳答案

对此有多种解决方案。

  • 您可以将所有函数放在同一个包中的不同文件中。您必须使用冗长的名称。
  • 您可以为每个资源创建一个结构,并为其定义一组函数:
type GithubRepository struct  {}

func (g GithubRepository) find() {}
func (g GithubRepository) create() {}

type GithubRepositoryPayload struct {}

func (g GithubRepositoryPayload) find() {}
func (g GithubRepositoryPayload) create() {}
...

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

关于go - 如何在 Go 项目目录结构中组织和分解服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57702463/

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