做者:林冠宏 / 指尖下的幽靈mysql
掘金:juejin.im/user/587f0d…linux
博客:www.cnblogs.com/linguanh/git
GitHub : github.com/af913337456…github
聯繫方式 / Contact:913337456@qq.comsql
[TOC]json
----- 概述windows
----- 腳本介紹api
--------- Linux服務器
--------- Windowsapp
--------- Mac
----- 使用流程
----- 部分代碼說明
----- TODO
一個可以僅僅依賴你建立好的 sql 文件,就能 自動幫你生成基礎服務端框架代碼
的 go server 框架。包含有:
1,基礎的 增刪改查
2,拓展性強的API
3,客戶端的數據傳入 與 服務端的輸出 所有依賴 struct
例如你的一個輸入結構體 inputStruct
設置爲
type inputStruct struct {
// nullTag==1 指明 id 必需要求在客戶端傳入 {"id":123}
Id int64 `json:"id" nullTag:"1"`
// nullTag==0 指明 name 在客戶端輸入的時候能夠沒必要要
Name string `json:"name" nullTag:"0"`
}複製代碼
對應上例,客戶端 post 過來的 json :
{"id":666, "name":"lgh"}
當你在使用 select 的時候,你的 sql 若是是這樣的:select User.id , User.age from User
那麼你的對應輸出結構體 outputStruct
應該是:
type outputStruct struct {
Id int64 `json:"id"`
Age int64 `json:"age"`
}複製代碼
最終輸出給客戶端:[{"id":xxx,"age":xxx}]
4,真正須要你寫的代碼極少,例如第三點的例子,你要寫的就那麼多,其中默認的 struct 會自動幫你生成
根據 sql 文件,自動生成代碼文件,包含有 struct.go,每張表對應生成一個包含有增刪改查的基礎方法文件one_key_create_code
根據內置的 makefile 或者 .bat 編譯並運行默認的 go server 程序,注意是默認的make_server
one_key_create_code.sh
make_server.sh
Makefile
one_key_create_code.bat
make_server.bat
參照 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
,裏面包含註釋規範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)
}複製代碼