作者 | Kaku 責編 | 歐陽姝黎作為一名有多年經驗的 CRUD 工程師,在做某項目時,需要在搭建完 apiserver 框架以及 dao 部分,三下五除二的就把 apiserver 部分搞定了,然後到
2021-06-12 11:29:09
作為一名有多年經驗的 CRUD 工程師,在做某項目時,需要在搭建完 apiserver 框架以及 dao 部分,三下五除二的就把 apiserver 部分搞定了,然後到了 dao 部分。想了想網上肯定有現成的工具可以自動生成 go struct,於是在網上找了找,果不其然,很多,但基本都是根據 table 來自動生成 go struct 的,於是搞定了創建 table 的 sql,創建完 table 之後順利的用工具生成了 go struct。
你以為這就完了嗎?
當然沒有,因為在此過程中我發現了一個 BUG 級的項目:https://github.com/smallnest/gen,點開作者主頁一看,原來又是一位自己關注已久的博主:鳥窩,肅然起敬。
這個項目能幹什麼呢?簡單來說就是他可以根據你的資料庫自動生成 go struct 及 dao 層、api 層,直接生成一套可運行的 restful api 項目,而且還搭配了 swagger 文件。拋開最終生成的程式碼不說,單就這個思想就已經夠我們學習了。
接下來簡單介紹下這個項目,為啥簡單介紹呢,因為使用起來確實很簡單,而且其文件說明比較完善。
項目採用 golang 編寫,生成的也是 golang 程式碼,安裝方式自然也是 golang 項目的安裝方式
go get -u github.com/smallnest/gen
在項目程式碼的 example 資料夾下存在一個 sample.db 檔案,可以直接根據這個檔案來生成完成的項目,當然也支援自定義配置來生成自己需要的部分。
## 根據sample.db生成項目程式碼
gen --sqltype=sqlite3
--connstr "./sample.db"
--database main
--json
--gorm
--guregu
--rest
--out ./example
--module example.com/rest/example
--mod
--server
--makefile
--json-fmt=snake
--generate-dao
--generate-proj
--overwrite
## 編譯 (使用make命令進行編譯,packr2會被自動安裝)
cd ./example
make example
## 二級制位置./bin/example
cp ../../sample.db .
./example
## 開啟瀏覽器訪問這裡 http://127.0.0.1:8080/swagger/index.html
## 同樣可以使用命令列工具進行訪問
curl http://localhost:8080/artists
可能會報錯,提示找不到某些檔案或者包,安裝即可,部分檔案判斷方式是直接檢查 GOPATH 下是否存在,所以會出現使用 go mod 模式時 get 下來之後仍然報錯的情況,可以直接到 GOPATH 下下載對應的項目即可。
是不是 so easy,只需要提供資料庫即可生成完整項目,但是他的功能不止於此。因為每個人有自己的習慣的編碼風格,自動生成的程式碼不可能滿足所有人的需求,那怎麼辦呢?
gen 支援自定義模板,可以把原模板匯出,基於其修改,或者乾脆按照自己的風格製作一套模板,通過 --templateDir= 參數指定自己的模板的路徑即可
如果只想進行簡單改動,可以嘗試 --exec= 參數,允許開發者自定義程式碼生成規則,在項目自帶的 custom 資料夾下有 sample.gen 檔案,可以直接指定 --exec=sample.gen 看執行效果,如果使用的是最新的 master,則執行會報錯,看程式碼可以發現在 2020/8/4 的一次修改,改變了某些方法的形參,而 sample.gen 沒有進行對應修改,按需修改即可。
項目用到的主要的技術就是 golang 的 template 功能,包括 template 的常用能力及定製函數等功能。另外包括 GIN 框架、GORM 框架等 crud 工程師們常用的包。裡面還有一個平時不怎麼用的包 packr,其主要功能就是把靜態檔案嵌入到最終生成的二進位制檔案中,程式就可以在任何位置直接運行而不需要受制於額外靜態檔案的位置等因素。
被 CRUD 折磨的人啊,是否有考慮過將其自動化呢,雖然業務邏輯是在變化的,但項目框架部分是基本保持不變的,搞一套自己習慣的開箱即用框架豈不是更美,畢竟從頭寫的話也需要一點時間,懶果然是人類進步的階梯,趕緊去下載項目試一試吧。
相關文章
作者 | Kaku 責編 | 歐陽姝黎作為一名有多年經驗的 CRUD 工程師,在做某項目時,需要在搭建完 apiserver 框架以及 dao 部分,三下五除二的就把 apiserver 部分搞定了,然後到
2021-06-12 11:29:09
導讀:一線品牌基本都缺貨,好的配置,秒無。宏碁擎,有時候還有點貨,能不能入,劃不划算?我們一起往下看看!需求定位:這款宏碁暗影騎士擎的外觀非常簡潔,沒有什麼特色,螢幕邊框也相對較粗,相
2021-06-12 11:27:48
前兩天蘋果釋出會開完的時候,機哥才說這次彷彿是一次「國產優秀系統、優秀App展示大會」。因為iOS 15很多新功能,在我們看來,都不是很新奇了。但是吼,機哥想起往年啊,蘋果總有很
2021-06-12 11:07:22
【 6月12日訊】相信大家都知道,隨著5G網路基礎服務、5G手機終端等不斷成熟,全球很多國家都開始掀起了一股5G網路建設狂潮,畢竟5G網路作為下一個網路時代必須的基礎服務,誰能夠在
2021-06-12 11:04:48
IT之家 6 月 12 日訊息 據中國新聞網,中國國家航天局今日在北京舉辦新聞釋出會,介紹我國首次火星探測任務情況。中國國家航天局新聞發言人許洪亮在會上表示,天問一號任務成功是
2021-06-12 11:04:06
6 月 11 日上午,諾基亞召開新品釋出會,正式釋出諾基亞 C20 Plus。諾基亞 C20 Plus 主打 4950mAh 超大電池,配合 AI 自適應省電技術,日常使用續航可達 2 天。該機正面搭載 6.5 英
2021-06-12 10:46:25