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

  • 相关阅读:
    什么是webview
    juqery.fn.extend和jquery.extend
    LeetCode
    5. Longest Palindromic Substring
    42. Trapping Rain Water
    11. Container With Most Water
    621. Task Scheduler
    49. Group Anagrams
    739. Daily Temperatures
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/13947432.html
Copyright © 2011-2022 走看看