golang gin框架 路由重定向(get, post,handler传参数)

一 直接func

  1.1 外部重定向

package main
import (
"github.com/gin-gonic/gin"
"net/http"
)

func main() {
    r:=gin.Default()
    //外部重定向 可以通过Redirect跳转到外部页面
    //http.StatusMovedPermanently为状态码301 永久移动    请求的页面已永久跳转到新的url
    //第二个参数为跳转的外部地址
    r.GET("/t", func(c *gin.Context) {
        c.Redirect(http.StatusMovedPermanently,"http://www.baidu.com")
    })
}

 

  1.2 内部重定向

package main
import (
"github.com/gin-gonic/gin"
"net/http"
)

func main() {
    r:=gin.Default()
//内部重定向 通过c.Request.URL.Path 设置跳转的指定的路径
    //通过HandleContext函数
    r.GET("/move", func(c *gin.Context) {
        // 指定重定向的URL 通过HandleContext进行重定向到test2 页面显示json数据
        c.Request.URL.Path = "/test2"
        r.HandleContext(c)
    })
    r.GET("/test2", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{"hello": "world"})
    })
    r.Run(":9999")
}

 

二 Handler

  2.1 传参handler函数

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func tHandler(a int) gin.HandlerFunc {
    fn := func(c *gin.Context) {
        fmt.Println("a:" ,a)
        c.String(200, "a")
    }
    return gin.HandlerFunc(fn)
}

func main() {

    a := 1

    router := gin.Default()
    router.GET("/test", tHandler(a))
    router.Run(":8080")
}

  浏览器访问http://localhost:8080/test 

golang gin框架 路由重定向(get, post,handler传参数)

 

 

 golang gin框架 路由重定向(get, post,handler传参数)

 

 

 

  2.1 传参router实现post重定向

    为了handler函数能获取router,我们把router作为参数传递,然后handler中调用handlecontext()函数实现重定向

.

.

r1 := router.Group("/test/v1.0")
{

  r1.POST("/Testtt", controller.Testtt(*router))
  r1.POST("/Testtt2", controller.Testtt2)
}

.

.

func Testtt(router gin.Engine) gin.HandlerFunc {
    fn := func(ctx *gin.Context) {
        testid := ctx.PostForm("testid")
        fmt.Println(testid)
        fmt.Println("a:",router)
        ctx.Request.URL.Path = "/test/v1.0/Testtt2"
        ctx.Request.Method = "POST"
        ctx.Set("testid",testid)
        router.HandleContext(ctx)
    }
    return gin.HandlerFunc(fn)
}
func Testtt2(ctx *gin.Context){
    testid:= ctx.PostForm("testid")
    fmt.Println(testid)
    resp := make(map[string]interface{})
    resp["errno"] = utils.SYS_OK
    resp["errmsg"] = utils.RecodeText(utils.SYS_OK)
    ctx.JSON(http.StatusOK, resp)
    return
}

  执行post请求

{"errmsg":"成功","errno":"0"}

golang gin框架 路由重定向(get, post,handler传参数)

 

   大功告成!!!

 

上一篇:libtool: link: require no space between `-L'


下一篇:go爬虫