Gin之重定向
注:本文基于Windos系统上Go SDK v1.17.5、github.com/gin-gonic/gin v1.7.7依赖进行讲解
1.外部重定向(redirect重定向)
//HTTP 重定向很容易。 内部、外部重定向均支持
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/a", func(c *gin.Context) {
//Redirect是*Context的方法,传入的参数是(code int, location string) ,无返回值
//StatusMovedPermanently是301
c.Redirect(http.StatusMovedPermanently, "http://www.sogo.com/")
})
_ = r.Run()
}
注:搜索http://localhost:8080/a后会直接进行跳转,但这仅仅算一次请求
2.内部重定向(redirect重定向)
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/a", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "/b")
})
r.GET("/b", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"hello": "world",
})
})
_ = r.Run()
}
3.路由重定向(forward转发)
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
r.GET("/a", func(c *gin.Context) {
/*Context结构体里有Request字段(类型是*http.Request),Request结构体里有一个URL字段(类型是*url.URL),URL结构体里面有path字段(类型是string)
*/
//跳转到/b对应的路由处理函数
c.Request.URL.Path = "/b"
r.HandleContext(c)
})
r.GET("/b", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"hello": "world",
})
})
_ = r.Run()
}
回车后,网址栏并没有发生变化,但网页内容发生了变化,且算两次请求