gin-restful基于 gin 的 restful api 開(kāi)發(fā)框架
# gin http restful項(xiàng)目生成
# 快速入門(mén)
go version > 1.2(應(yīng)用go mod)
git clone https://github.com/go-libraries/gin-restful
cd gin-restful
chmod +x ./build.sh
$GOBIN/createGinProject -package=項(xiàng)目名 -path=項(xiàng)目路徑
# 生成項(xiàng)目基本結(jié)構(gòu)
```go
-base
基礎(chǔ)文件
-config
config.ini
-handlers
http處理回調(diào)
-logs
日志文件目錄
-models
模型文件
-processes
可以理解為控制器對(duì)象
-routers
路由文件
go.mod
main.go
Readme.md
```
# 參數(shù)詳解
```go
Usage of createMangoProject:
-dsn string
connection info names dsn
-h this help
-help
this help
-package string
package name use all project
-path string
project build in this path
-port string
port
```
# 二次開(kāi)發(fā)詳解
## 控制器
1. 可以在services中書(shū)寫(xiě)新的控制器
```go
type UserSaveService struct {
base.Controller
Account *UserSaveRequest
}
func (u *UserSaveService) Decode() base.IError {
// 解析 輸入字段 如下
u.Account = &UserSaveRequest{&models.UserAccount{}, ""}
if bt, err := u.Ctx.GetRawData(); err == nil {
if err := json.Unmarshal(bt, u.Account); err != nil {
return base.NewError(err)
}
} else {
return base.NewError(err)
}
return nil
}
func (u *UserSaveService) Process() base.IError {
//todo:執(zhí)行業(yè)務(wù)過(guò)程
return nil
}
```
2. 可以在controllers中注入執(zhí)行方法
```go
func SaveUser(c *gin.Context) {
p := &base.Controller{}
p.ServiceFun = func(u *base.DefaultService) base.IError {
u.Data = "hello world"
return nil
}
base.RunService(p, c)
}
```
## 路由
路由可以開(kāi)發(fā)二次中間件功能
```go
package routers
import (
"github.com/gin-gonic/gin"
"time"
"{{package}}/base"
)
type Route struct {
Name string
Method string
Path string
HandlerFunc gin.HandlerFunc
}
func calTime(fn func(c *gin.Context)) func(c *gin.Context) {
return func(c *gin.Context) {
start := time.Now()
fn(c)
base.Log.Printf("Done in %v (%s %s)\n", time.Since(start), c.Request.Method, c.Request.URL.Path)
}
}
func init() {
//Router.GET("/", func(c *gin.Context) {
// time.Sleep(5 * time.Second)
// c.String(http.StatusOK, "Welcome Gin Server")
//})
for _, route := range getUserRoutes() {
handle := calTime(route.HandlerFunc)
base.Gin.Handle(route.Method, route.Path, handle)
}
//todo: add other Routes
}
```
## 模型
默認(rèn)使用gorm作為數(shù)據(jù)驅(qū)動(dòng),如果初始化--dsn項(xiàng)目不為空,會(huì)自動(dòng)將該db下表生成模型并提供基礎(chǔ)方法
外部庫(kù)詳見(jiàn) [外部庫(kù)-模型生成器](https://github.com/go-libraries/genModels)
## 文檔
文檔使用swagger進(jìn)行配置,可以一鍵生成
詳見(jiàn)評(píng)論
圖片
表情
