PHP轉Go,框架選什么?
這是一期會引起廣泛討論的內容,不亞于“PHP是世界上最好的語言”。
內功心法
不管我們是否基于框架去開發,不管使用什么框架去開發。
6個字的內功心法一定要牢記:高內聚,低耦合。
不管是單體項目還是微服務,不管是小組件還是大功能,不管是業務還是領域DDD,也都遵從這個原則:
- (模塊、功能、業務、領域)內部高內聚,
- (模塊、功能、業務、領域)之間低耦合。
PHP轉Go,優選哪個框架?
答案:GoFrame
為什么?
和PHP的Laravel簡直太像了,用起來太香了,很順手。
為什么不火?
對新手不友好,有門檻。
GoFrame特點
優勢:
- 模塊化
- 高性能
- 企業級
劣勢:
- 有學習門檻
- 版本兼容性不好
- 暫不支持微服務
框架選型
誰適合用GoFrame
- PHP轉Go(Laravel的同學會用起來很爽)
- Java轉Go (Spring Boot的同學會用起來很爽)
- 比較復雜的企業級單體項目 (很規范,維護成本低,少踩很多坑)
誰不適合用GoFrame
- 編程小白(容易被勸退)
- 特別簡單的項目用gin等輕量級框架(殺雞焉用牛刀)
- 非常復雜的分布式微服務項目用go-zero等微服務框架(沒有任何一款框架是萬能的)
GoFrame框架設計思想
這些不作為本期內容的重點,大家可以直接閱讀官方文檔。
我也有計劃錄制視頻,結合我們的商業項目,站在使用者的角度去分享使用GoFrame的感受,如何理解框架的設計思想。
- 模塊化設計[1]
- 統一框架設計[2]
- 工程開發設計[3]
- 全鏈路跟蹤設計[4]
- 全錯誤堆棧設計[5]
- 接口化與泛型設計[6]
- 隱式與顯式初始化[7]
- Context相關設計[8]
- 微服務相關設計[9]
開發流程
我梳理的 GoFrame V2最新版的開發流程
從0到1
- 設計表結構
- 使用gf gen dao 生成對應的 dao/do/model
- 編寫api層:定義業務側數據結構,提供對外接口的輸入/輸出數據結構
- 編寫model層:定義數據側數據結構,提供對內的數據處理的輸入/輸出數據結構
- 編寫logic層,自動生成service層代碼。(通過配置goland File Watcher自動生成,也可以通過gf gen service手動執行腳本生成,建議前者)
- 在service層代碼生成RegisterXX()方法后,在對應的logic模塊注冊服務(每個模塊只需要寫一次)
- 編寫controller層,接收/解析用戶輸入的參數,調用service層的服務。
- 注冊路由,對外暴露接口,比如這個項目是編寫cmd.go文件。
- 在main.go中 加入一行 _ "project-name/internal/logic" (只需寫一次)
- 在main.go中加入一行 _ "github.com/gogf/gf/contrib/drivers/mysql/v2" (如果你使用的是mysql;只需寫一次)
核心步驟
- 編寫api層:定義業務側數據結構,提供對外接口的輸入/輸出數據結構
- 編寫model層:定義數據側數據結構,提供對內的數據處理的輸入/輸出數據結構
- 編寫logic層,自動生成service層代碼。(通過配置goland File Watcher自動生成,也可以通過gf gen service手動執行腳本生成,建議前者)
- 編寫controller層,接收/解析用戶輸入的參數,調用service層的服務。
- 注冊路由,對外暴露接口,比如這個項目是編寫cmd.go文件。
總結
沒有一個框架是萬能的,也沒有一個語言是萬能的。
結合自己的需求去選擇合適的框架,合適的開發語言。
不要被眼前暫時的得意或者失意“一葉障目”,結合實際情況,實事求是,擁抱變化,不斷學習,才能“見泰山”。
面向“養家糊口”編程,能穩定賺錢的職業才是好職業。
參考資料
[1]模塊化設計: https://goframe.org/pages/viewpage.action?pageId=3672891
[2]統一框架設計: https://goframe.org/pages/viewpage.action?pageId=7290658
[3]工程開發設計: https://goframe.org/pages/viewpage.action?pageId=30740161
[4]全鏈路跟蹤設計: https://goframe.org/pages/viewpage.action?pageId=35356689
[5]全錯誤堆棧設計: https://goframe.org/pages/viewpage.action?pageId=35356691
[6]接口化與泛型設計: https://goframe.org/pages/viewpage.action?pageId=35356693
[7]隱式與顯式初始化: https://goframe.org/pages/viewpage.action?pageId=6357066
[8]Context相關設計: https://goframe.org/pages/viewpage.action?pageId=7301813
[9]微服務相關設計: https://goframe.org/pages/viewpage.action?pageId=54100607
本文轉載自微信公眾號「 程序員升級打怪之旅」,作者「王中陽Go」,可以通過以下二維碼關注。
轉載本文請聯系「 程序員升級打怪之旅」公眾號。