zoukankan      html  css  js  c++  java
  • gin框架注册struct路由

    Ginrest的简单实用

    ginrest是我写的一个关于gin框架的辅助插件,它可以帮助你在开发中省去一些冗余的步骤

    安装

    go get github.com/Ivy1996-encode/ginrest
    

    原生gin中使用

    package main
    
    import (
    	"github.com/Ivy1996-encode/ginrest"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type User struct{}
    
    func (*User) Get(c *gin.Context) {
    	c.JSON(http.StatusOK, "user list")
    }
    
    func (*User) Post(c *gin.Context) {
    	c.JSON(http.StatusOK, "user list")
    }
    
    func main() {
    	server := gin.Default()
    	server.Any("/user", ginrest.AsMethodHandlerFunc(new(User)))
    
    	server.Run()
    }
    

    使用gin原生的路由注册方式,使用ginrest.AsMethodHandlerFunc将我们的结构体注册进去,它回去根据请求方法的名称去匹配对应的handler,这样就可以不用写多个路由去匹配不同的请求方式了。

    但是这种写法会生成多余的路由。

    使用router

    package main
    
    import (
    	"github.com/Ivy1996-encode/ginrest"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type User struct{}
    
    func (*User) Get(c *gin.Context) {
    	c.JSON(http.StatusOK, "user list")
    }
    
    func (*User) Post(c *gin.Context) {
    	c.JSON(http.StatusOK, "user list")
    }
    
    func main() {
    	server := ginrest.Default()
    
    	router := ginrest.Router(server, ginrest.MethodsActions)
    
    	router.Register("/user", new(User))
    
    	server.Run()
    }
    
    

    使用ginrest提供的路由来为我们注册对于的handler,路由接受两个参数,第一个是我们的默认的*gin.Engine指针对象,第二个是一个匹配规则。这里默认的是根据请求方法的名字来匹配规则,使用这种注册不会产生多余的路由。你可以重写注册的structGetActions方法来覆盖默认的匹配规则。

    使用RestRouter

    package main
    
    import (
    	"github.com/Ivy1996-encode/ginrest"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    type User struct{}
    
    func (*User) List(context *gin.Context) {
    	context.JSON(http.StatusOK, "user list")
    }
    
    func (*User) Retrieve(context *gin.Context) {
    	context.JSON(http.StatusOK, "user detail")
    }
    
    func main() {
    	server := ginrest.Default()
    	router := ginrest.RestRouter(server)
    	router.Register("/user", new(User))
    	server.Run()
    }
    
    

    RestRouterRouter的进阶版本, 它可以自动的根据事先定义好的方法去注册对应的路由,并且支持对象级路由,如上的例子对象的路由为

    [GIN-debug] GET    /user                     --> reflect.methodValueCall (4 handlers)
    [GIN-debug] POST   /user                     --> reflect.methodValueCall (4 handlers)
    

    如果你使用过djangorestframework,你会很轻松的理解这个路由匹配方式

  • 相关阅读:
    02-09 对数线性回归(波士顿房价预测)
    02-02 感知机原始形式(鸢尾花分类)
    02-19 k近邻算法(鸢尾花分类)
    02-21 决策树ID3算法
    A-02 梯度下降法
    09-01 Tensorflow1基本使用
    02-34 非线性支持向量机(鸢尾花分类)+自定义数据分类
    [Python]网络爬虫(四):Opener与Handler的介绍和实例应用(转)
    Eclipse+PyDev 安装和配置(转)
    [Python]网络爬虫(二):利用urllib2通过指定的URL抓取网页内容(转)
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/13947432.html
Copyright © 2011-2022 走看看