」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > GO——項目結構

GO——項目結構

發佈於2024-07-30
瀏覽:933

我今年(2022 年)開始真正使用 Golang 進行編程,我立即做的事情就是尋找參考資料,以了解改進專案結構的最佳方式。這篇文章只是討論同一主題的許多其他文章之一,也許這就是我決定寫它的原因。

首先,golang 在處理資料夾/套件的方式上已經完全不同了,而且,為了改進,它有一個非常固執己見的本質,許多官方文件告訴我們做某事的「goway」方式是什麼(完整)不是我接觸的),但是,在您組織文件和資料夾的方式中,並沒有真正的方向,因此每個人都對這部分給出了自己對世界的解釋。

我將這篇文章分成 3 個參考文獻,然後展示這些參考文獻的混合在專案中的效果。

第一個參考

一個有效的複雜系統總是從一個有效的簡單系統演變而來。
-- 加爾定律

對於小型應用程序,專案結構必須簡單。

Imagem para um projeto simples com tudo na raiz


https://innovation.enova.com/gophercon-2018-how-do-you-struct-your-go-apps/

第二參考

「社區」對 Go 生態系統中常見的一組歷史和新興設計佈局模式進行了調查。這項調查中有很多很酷的東西,但引起我注意的是 /cmd 和 /internal 資料夾。

/指令

本計畫的主要應用。
每個應用程式的目錄名稱必須與您想要的可執行檔的名稱相符(例如/cmd/myapp)。

/內部的

私人應用程式和函式庫程式碼。您不希望其他人將這些程式碼匯入到他們的應用程式或庫中。請注意,此佈局模式是由 Go 編譯器本身強加的。

第三參考

更好地將「細節」與真正提供價值的東西分開的架構。

GO — Estrutura de projetos


結果

對於一個簡單的應用程序,我嘗試保持簡單,但是,當範圍變大一點時,我嘗試在什麼是“核心”/域和什麼是細節/基礎設施之間做出細微的區分。

GO — Estrutura de projetos


請注意,在 cmd 中,我沒有 tuttipet 資料夾,正如參考項目所建議的那樣。起初我嘗試使用建議的模式,但由於這個 API 已經推出了命令列介面和 terraform 提供程序,我決定保留這種方式。

GO — Estrutura de projetos


快速放大核心。我在這裡嘗試簡單化,不創建資料夾。我只與外部世界保持 1 個接觸點(main.go),任何概括的都有自己的文件,任何不概括的都保留在其上下文中,簡單。

GO — Estrutura de projetos


使用 tuttipet.New(簡短、簡潔且令人回味),「髒」層可以與用例互動(我發現用例這個詞比互動器更容易理解)

GO — Estrutura de projetos


快速放大細節。以下是該領域成功的簡單工具。

結論

我在Golang 提供的道路上仍然很弱,仍在嘗試弄清楚用它可以做什麼,但是,儘管我不喜歡Go 做某些事情的方式,但它已被證明是相當好的簡單而強大。

總結,盡可能保持簡單,如果變得太複雜......我會回到繪圖板。

其他參考資料

https://dev.to/booscaaa/implementando-clean-architecture-com-golang-4n0a
https://github.com/golang-standards/project-layout
https://blog.boot.dev/golang/golang-project-struct/
https://github.com/bnkamalesh/goapp
https://www.wolfe.id.au/2020/03/10/how-do-i-struct-my-go-project/
https://blog.logrocket.com/flat-struct-vs-layered-architecture-structuring-your-go-app/
https://developer20.com/how-to-struct-go-code/
https://dev.to/jinxankit/go-project-struct-and-guidelines-4ccm
https://github.com/bxcodec/go-clean-arch
https://golangexample.com/example-go-clean-architecture-folder-pattern/
https://www.calhoun.io/flat-application-struct/
https://go.dev/doc/ effective_go#names
https://go.dev/blog/package-names

原文:https://medium.com/@espigah/go-layout-do-projeto-18aacce8089d

版本聲明 本文轉載於:https://dev.to/espigah/go-estrutura-de-projetos-1j0k?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-20
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-12-20
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-20
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-20
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-12-20
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-20
  • 填充空 Python 清單時如何避免 IndexError?
    填充空 Python 清單時如何避免 IndexError?
    修復將元素分配給列表時的IndexError嘗試通過依次分配每個元素來創建列表時,您可能會遇到IndexError如果目標清單最初為空。出現此錯誤的原因是您試圖存取清單中不存在的索引。 要解決此問題並將元素正確添加到列表中,您可以使用追加方法:for l in i: j.append(l)此...
    程式設計 發佈於2024-12-20
  • 如何在 Android 中解析 ISO 8601 日期/時間字串?
    如何在 Android 中解析 ISO 8601 日期/時間字串?
    在Android 解析ISO 8601 日期/時間字串問題:您已收到來自Web 服務的標準ISO 8601字串,例如“2010-10-15T09:27:37Z”。如何在Android中將此字串轉換為日期/時間物件以進行進一步操作? 答案:Android提供了一個SimpleDateFormat類,讓...
    程式設計 發佈於2024-12-20
  • 如何使用正規表示式檢測 URL(包括裸 URL)?
    如何使用正規表示式檢測 URL(包括裸 URL)?
    使用正規表示式偵測 URL您目前的程式碼無法符合缺少「http://」前綴的裸 URL。為了解決這個問題,可以考慮採用綜合正規表示式:https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\ ~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9(...
    程式設計 發佈於2024-12-20
  • 如何在 AngularJS 中有效地求和數組屬性?
    如何在 AngularJS 中有效地求和數組屬性?
    AngularJS 中的高級數組求和在 AngularJS 中,對數組屬性求和可能是一項常見任務。基本方法包括迭代數組並累積屬性值。然而,當面對多個陣列和不同的屬性名稱時,這種方法變得乏味。 為了解決這個問題,需要一個更靈活、可重複使用的解決方案,它允許對任何陣列屬性進行方便的求和。這可以使用 re...
    程式設計 發佈於2024-12-20
  • 如何在不進行按引用修改的情況下高效檢索第一個數組元素?
    如何在不進行按引用修改的情況下高效檢索第一個數組元素?
    在不透過引用操作的情況下檢索數組的第一個元素獲取數組的第一個元素可能是編程中的常見任務。雖然有多種方法可以實現這一點,但重要的是要考慮不使用引用操作的約束,就像 array_shift 的情況一樣。本文探討了在 PHP 中實現此目標的幾種有效方法。 O(n) 方法:一種方法是使用 array_val...
    程式設計 發佈於2024-12-20
  • C++ 函式宣告中「const」的真正意義是什麼?
    C++ 函式宣告中「const」的真正意義是什麼?
    解密返回類型、函數參數和成員函數中的Const 關鍵字C 程式碼片段中:const int* const Method3(const int* const&amp;) const;the術語“const”出現多次,每次都有特定含義。 1.傳回型別中的 Const(指向 Int Const 的...
    程式設計 發佈於2024-12-20
  • 使用“list.List”是建立帶有字串鍵和列表值的 Go 映射的最佳方法嗎?
    使用“list.List”是建立帶有字串鍵和列表值的 Go 映射的最佳方法嗎?
    建立字串到清單的對應問題:您想要建立一個有字串型別鍵的映射和列表類型的值。以下程式碼片段是否是正確的方法:package main import ( "fmt" "container/list" ) func main() { x :=...
    程式設計 發佈於2024-12-19
  • 使用 html css 和 javascript 幻覺的 Tic-Tac-Toe 遊戲 https://www.instagram.com/webstreet_code/
    使用 html css 和 javascript 幻覺的 Tic-Tac-Toe 遊戲 https://www.instagram.com/webstreet_code/
    在 Instagram 上關注我們:https://www.instagram.com/webstreet_code/ ? ✨ 有玻璃效果的井字遊戲! ✨? 我剛剛使用 HTML、CSS 和 JavaScript 構建了一款經典的 Tic-Tac-Toe 遊戲,具有時尚的玻璃態設計。觀看視頻,看看...
    程式設計 發佈於2024-12-19
  • TB 級資料庫的 MySQL 與 NoSQL:聚集索引何時是正確的解決方案?
    TB 級資料庫的 MySQL 與 NoSQL:聚集索引何時是正確的解決方案?
    MySQL:探索資料庫設計迷宮優化大型資料庫時,必須考慮資料庫設計策略以提高效能。在給定的場景中,包含執行緒的 TB 級資料庫由於其龐大的規模而面臨效能挑戰。本文探討了 MySQL 和 NoSQL 之間的選擇,重點介紹了 MySQL 的 innodb 引擎及其聚集索引的優點。 了解 MySQL 的 ...
    程式設計 發佈於2024-12-19

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3