gin-restful基于 gin 的 restful api 开发框架

联合创作 · 2023-09-19 07:15


# gin http restful项目生成

# 快速入门

go version > 1.2(应用go mod)

git clone https://github.com/go-libraries/gin-restful

cd gin-restful

chmod +x ./build.sh

$GOBIN/createGinProject -package=项目名 -path=项目路径

# 生成项目基本结构

```go
-base
基础文件
-config
config.ini
-handlers
http处理回调
-logs
日志文件目录
-models
模型文件
-processes
可以理解为控制器对象
-routers
路由文件
go.mod
main.go
Readme.md
```

# 参数详解

```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
```

# 二次开发详解

## 控制器

1. 可以在services中书写新的控制器

```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:执行业务过程
return nil
}
```

2. 可以在controllers中注入执行方法

```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)
}
```

## 路由

路由可以开发二次中间件功能
```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
}
```

## 模型

默认使用gorm作为数据驱动,如果初始化--dsn项目不为空,会自动将该db下表生成模型并提供基础方法

外部库详见 [外部库-模型生成器](https://github.com/go-libraries/genModels)


## 文档

文档使用swagger进行配置,可以一键生成

详见
浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报