當前位置:
首頁 > 知識 > Go 語言,開源服務端代碼自動生成 框架-EasyGoS

Go 語言,開源服務端代碼自動生成 框架-EasyGoS


概述

一個能夠僅僅依賴你創建好的 sql 文件,就能 自動幫你生成基礎服務端框架代碼 的 go server 框架。包含有:

1,基礎的 增刪改查

2,拓展性強的API

3,客戶端的數據傳入 與 服務端的輸出 全部依賴 struct

例如你的一個輸入結構體 inputStruct 設置為

type inputStruct struct {

Id int64 `json:"id" nullTag:"1"` // nullTag==1 指明 id 必須要求在客戶端傳入 {"id":123}

Name string `json:"name" nullTag:"0"` // ==0 指明 name 在客戶端輸入的時候可以不必要

}

對應上例,客戶端輸入的 json : {"id":666, "name":"lgh"}

當你在使用 select 的時候,你的 sql 如果是這樣的:select User.id , User.age from User

那麼你的對應輸出結構體 outputStruct 應該是:


type inputStruct struct {

Id int64 `json:"id"`

Age int64 `json:"age"`

}

4,真正需要你寫的代碼極少,例如第三點的例子,你要寫的就那麼多,其中默認的 struct 會自動幫你生成Go 語言,開源服務端代碼自動生成 框架-EasyGoS


腳本介紹

根據 sql 文件,自動生成代碼文件,包含有 struct.go,每張表對應生成一個包含有增刪改查的基礎方法文件

one_key_create_code

根據內置的 makefile 或者 .bat 編譯並運行默認的 go server 程序,注意是默認的

make_server

Linux

one_key_create_code.sh

make_server.sh

Makefile

Windows

one_key_create_code.bat

make_server.bat

Mac

參照 linux 的


使用流程

1,在你的 伺服器 安裝 mysql 或者 mariadb

2,編寫好的你的 sql 文件,可以參照我源碼裡面的 this.sql

3,運行步驟2編寫好的 sql 文件

4,修改 sql_2_api.go 裡面 main 內的 sql 文件名稱

5,運行 one_key_create_code 腳本,成功後會在同級目錄生成下面文件,記得刷新目錄

struct.go,裡面包含注釋規範

對應你 sql 文件裡面的表名稱生成的函數文件,格式:func_表名稱.go

6,自己寫好,main.go 或者 使用我提供的默認 LghSampleMain.go,在裡面 添加你自己的路由


router.HandleFunc("/insert",insert_luser_sample).Methods("POST")

router.HandleFunc("/select",select_luser_sample).Methods("GET")

router.HandleFunc("/update",update_luser_sample).Methods("POST")

router.HandleFunc("/delete",delete_luser_sample).Methods("POST")

7,配置好 conf.json 文件,我裡面有例子


// Host 是絕對路徑

// Port 是要被監聽的埠

{

"Host": "127.0.0.1",

"Port": ":8884",

"FilePort":":8885",

"DbName":"database",

"DbUser":"root",

"DbPw":"123456",

"DbPort":"3306"

}

8,現在執行 make_server 腳本,觀察控制台的輸出,即可。

部分代碼說明

核心的參數結構體


type LghRequest struct {

w http.ResponseWriter

r *http.Request

// 標記使用,當前的方法名稱

funcName string

// 輸入的結構體,與客戶端輸入的 json 成對應關係

inputStruct interface{}

// 自定義 slices 的回調,方便你做參數處理,返回 true 意味著此次操作終止,例如 update

slicesCallBack func(slices []interface{}) bool

// 根據傳入的 jsonObj 生成的 slices 來回調,方法生成自定義 sql

getSqlCallBack func(slices []interface{},inputStruct interface{}) string

}

例子方法

1,演示不需要參數的形式


/** 演示不需要參數的形式 */

func update_0(w http.ResponseWriter,r *http.Request) {

request := LghRequest{

w,

r,

"update_luser",

nil, /** nil 表示沒輸入結構體 */

func(slices *[]interface{}) bool{

return false

},

func(slices *[]interface{},inputStruct interface{}) string {

return "update LUser set u_user_id="444" where id="1""

}}

updateDataByStruct(request)

}

2,演示當有參數輸入的時候,參數僅做判斷,但是不需要組合到 sql 的情況


/** 演示當有參數輸入的時候,參數僅做判斷,但是不需要組合到 sql的情況 */

func update_1(w http.ResponseWriter,r *http.Request) {

type testS struct {

Id int64 `json:"id" nullTag:"1"` // nullTag==1 指明 id 必須要求在客戶端傳入 {"id":123}

}

request := LghRequest{

w,

r,

"update_luser",

new (testS),

func(slices []interface{}) bool{

// 在這裡對 slices 做你想做的操作,增加或者刪除等等

if slices[0] == -1{

return true /** 返回 true,終止插入,提示錯誤或者其它 */

}

slices = append(slices[:0], nil) /** 自己做完處理刪除掉 */

return false

},

func(slices []interface{},inputStruct interface{}) string {

// 如果你想根據輸入的 json 數據來特定生成 sql,那麼就可以在這裡使用 slices 來操作

return "update LUser set u_user_id="444" where id="2""

}}

updateDataByStruct(request)

}

3,演示使用輸入參數的情況


/** 演示使用輸入參數的情況 */

func update_luser_sample(w http.ResponseWriter,r *http.Request) {

type testS struct {

Id int64 `json:"id" nullTag:"1"`

}

request := LghRequest{

w,

r,

"update_luser",

new (testS),

func(slices []interface{}) bool{

return false

},

func(slices []interface{},inputStruct interface{}) string {

return "update LUser set u_user_id="444" where id=?" /** 對應 id */

}}

updateDataByStruct(request)

}


更多優質內容推薦:

2017優就業就業促進計劃:http://www.ujiuye.com/zt/jycj/?wt.bd=zdy35845tt

學IT,用周末給自己加薪!

http://www.ujiuye.com/zt/zmb/?wt.bd=zdy35845tt

IT職業教育:http://xue.ujiuye.com/

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

Netty SSL安全配置
記一次VS Code崩潰的解決
STM32F030系列實現仿位帶操作
您已收到告白簡訊,請注意查收!

TAG:IT優就業 |

您可能感興趣

Google正式集成Kubernetes引擎與GPU服務
谷歌Goggles已停止服務 Google Lens成替代品
Uber與PayPal達成合作 開通移動支付服務Venmo
DXC Technology推出DXC Bionix?,以大規模提供自動化IT服務
國內可用的 Google Play 替代服務
Google推出Google One雲盤服務替代Google Drive
微軟開源Azure雲服務AI引擎Infer.NET
Google決定擱置Allo 將資源集中在RCS服務
EasyMile聯手DemandTrans,為北美市場提供自動駕駛按需移動服務
PrintMyRoute公司推出將運動路線轉化為3D列印模型的服務
Oracle MySQL雲服務入門系列4:MySQL自動備份和恢復
Google 宣布遊戲串流服務 Project Stream
Google 公布只能聽歌的 YouTube Music 流媒體服務
索尼流媒體服務平台Crackle啟用新LOGO
Genesis Markets和LMAX Digital達成合作 提升客戶加密交易服務
GlobalFoundries宣布成立Avera Semi全資子公司,聚焦ASIC服務
在SAP雲平台的CloudFoundry環境下消費ABAP On-Premise OData服務
微軟計劃欲將Xbox Game Pass服務帶到PC平台
HPE發布混合雲管理服務GreenLake
Unity攜手Appearition成立澳大利亞CoE,旨在為全球企業提供服務