Go 一鍵生成 後端 restful api
摘要:
一鍵生成 後端 restful api
說明
主要用這個庫 gitee.com/konyshe/gogo, 詳情可以去檢視說明檔案。
只要連線好資料庫表,不用 資料庫的 models檔案,就可以最簡單的辦法 生成 restful api.
原專案有一個小問題,
需要修改 原始碼 ...
一鍵生成 後端 restful api
說明
主要用這個庫 gitee.com/konyshe/gogo, 詳情可以去檢視說明檔案。 只要連線好資料庫表,不用 資料庫的 models檔案,就可以最簡單的辦法 生成 restful api. 原專案有一個小問題, 需要修改 原始碼SQLUtils.go 239行修改 case "INT": { queryData[queryCount][a] = new(sql.NullInt64) } 290 追加 case *sql.NullInt64: result[columnsType[a].Name()] = *s 是因為涉及到 資料庫裡面int 欄位 允許為空,預設是null,資料庫讀取的時候 會報錯 sql: Scan error on column index 3, name "created_on": converting driver.Value type <nil> ("<nil>") to a int32: invalid syntax
demo
package main import ( "net/http" "strconv" "gitee.com/konyshe/gogo" ) func main() { // 初始化資料庫連線 if err := gogo.SQLInit("mysql", "root:1234567890@tcp(192.168.100.50:3306)/go?charset=utf8&parseTime=true", 10, 1); err != nil { gogo.Log().Error(err.Error()) return } // 增 gogo.POST("/restful/:tablename", func(ctx *gogo.HTTPContext) { affect, err := gogo.SQLInsert( ctx.GetPathParam(":tablename"), ctx.GetPostBody()) if err != nil { gogo.Log().Error(err.Error()) ctx.WriteString(err.Error()) } else { ctx.WriteString(strconv.FormatInt(affect, 10)) } }) // 刪 gogo.DELETE("/restful/:tablename/:id", func(ctx *gogo.HTTPContext) { affect, err := gogo.SQLDelete( ctx.GetPathParam(":tablename"), "id="+ctx.GetPathParam(":id")) if err != nil { gogo.Log().Error(err.Error()) ctx.WriteString(err.Error()) } else { ctx.WriteString(strconv.FormatInt(affect, 10)) } }) // 改 gogo.PUT("/restful/:tablename/:id", func(ctx *gogo.HTTPContext) { affect, err := gogo.SQLUpdate( ctx.GetPathParam(":tablename"), "id="+ctx.GetPathParam(":id"), ctx.GetPostBody()) if err != nil { gogo.Log().Error(err.Error()) ctx.WriteString(err.Error()) } else { ctx.WriteString(strconv.FormatInt(affect, 10)) } }) // 查 gogo.GET("/restful/:tablename/:id", func(ctx *gogo.HTTPContext) { queryData, err := gogo.SQLQueryByMap( "", ctx.GetString("feilds"), ctx.GetPathParam(":tablename"), "id="+ctx.GetPathParam(":id"), "", 0, 1) if err != nil { gogo.Log().Error(err.Error()) ctx.WriteString(err.Error()) } else { ctx.WriteJSON(queryData) } }) // 查 gogo.GET("/restful/:tablename", func(ctx *gogo.HTTPContext) { queryData, err := gogo.SQLQueryByMap( ctx.GetString("columnname"), ctx.GetString("feilds"), ctx.GetPathParam(":tablename"), ctx.GetString("where"), ctx.GetString("order"), ctx.GetInt("offset", 0), ctx.GetInt("count", 10)) if err != nil { gogo.Log().Error(err.Error()) ctx.WriteString(err.Error()) } else { ctx.WriteJSON(queryData) } }) // 404頁面 gogo.STATUS(http.StatusNotFound, func(ctx *gogo.HTTPContext) { ctx.WriteHeader(http.StatusNotFound) l, err := gogo.SQLQueryByMap("webname", "*", "dede_flink", "", "", 0, 100) if err == nil { ctx.WriteExecute(l, "views/notfound.tmpl") return } }) // 啟動HTTP服務 gogo.Run(":8080") }