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,你会很轻松的理解这个路由匹配方式

  • 相关阅读:
    git笔记
    初试linux,cp、rm、mv、file、umask等命令粗略使用方法
    Linux的rwx
    nano的简单笔记
    windows10访问ftp中文乱码怎么办?
    Windows 将FTP 映射到本地文件夹 --简化操作
    计算地址掩码
    Can't connect to MySQL server on localhost (10061)解决方法
    微信小程序开发入门学习(2):小程序的布局
    微信小程序开发入门学习(1):石头剪刀布小游戏
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/13947432.html
Copyright © 2011-2022 走看看