一 直接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
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"}
大功告成!!!