我用Go和gRPC創建了一個微服務項目,並試圖找出最好的程式結構,它可以作為我其他項目的模板。我還將程式設計和編程的最佳實踐應用於Go Microservice程式,例如清晰架構(Clean Architecture),依賴註入(Dependency Injection),日誌記錄,錯誤處理等。我有 ...
我用Go和gRPC創建了一個微服務項目,並試圖找出最好的程式結構,它可以作為我其他項目的模板。我還將程式設計和編程的最佳實踐應用於Go Microservice程式,例如清晰架構(Clean Architecture),依賴註入(Dependency Injection),日誌記錄,錯誤處理等。我有Java背景,併發現自己在Java和Go之間掙扎,它們之間的編程理念完全不同。我寫了一系列關於在項目工作中做出的設計決策和取捨的文章。
閱讀這些文章不需要熟悉Go,但如果你有Go基礎絕對會有幫助。如果你不會Go並且無法確定文章中的代碼在做什麼,那麼你需要從這裡Go by Example¹(你不必完成裡面的所有主題,只需要前面幾個)學習一些基本的Go。本系列中的“事務支持”涉及到資料庫,需要Go中的一些資料庫知識,你可以從Go database / sql tutorial獲取它²。如果你對Go Microservice編程感興趣並思考和關心代碼設計,程式結構,編碼風格,日誌記錄,事務管理和依賴註入,那麼這個系列非常適合你。
本系列的側重點?
本系列不是關於如何快速創建程式原型,而是關於如何進行良好的程式設計使之能適應將來的變化。例如,你可能希望將一個服務的部分功能拆分為單獨的微服務,或添加事務支持,或切換到更好的日誌記錄器,但不想更改代碼中的每個日誌記錄語句。運用此項目中的程式設計,在進行上述更改時不會觸及業務邏輯代碼。你甚至很少更改任何現有代碼(容器代碼除外),多數時候只添加新代碼,因此QA工作量大大減少。你可以使用此程式作為下一個微服務應用的基礎框架,省去了從頭開始的麻煩。你唯一需要做的就是熟悉本框架的內部結構。如果你有Spring(Java)背景或來自面向對象的經歷,或者知道清晰架構(Clean Architecture)或SOLID (面向對象設計),那麼這些代碼應該對你很熟悉。
你無需按以下順序閱讀文章。 如果你熟悉清晰架構(Clean Architecture)³或SOLID (面向對象設計)⁴,你可以按任意順序閱讀文章而不會有任何問題。 但我還是建議你至少先讀完第一篇,它將為你提供整個項目的概述,然後你可以選擇後面的任何一篇的文章。
源程式:
完整的源程式鏈接 github: https://github.com/jfeng45/servicetmpl
索引:
[1] Go by Example
[3][The Clean Code Blog](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)