亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號