1、基本路由
前端请求到达后端如何被处理,这就需要进行路由去匹配相应的handler方法执行了,gin框架中采用的路由库是基于httprouter做的。
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
//创建路由
r := gin.Default()
//绑定路由规则,执行函数
//gin.Context,封装了request和response
r.GET("/", func(c *gin.Context) {
c.String(200, "hello word")
})
//监听端口默认为8080
r.Run(":8000")
}
2、Restful风格的Api
gin支持Restful风格的Api,即URL定位资源,用HTTP描述操作。
1.查询 /user/getXxx Get user/Xxx
2.添加 /user/addXxx POST user/Xxx
3.修改 /user/updateXxx PUT user/Xxx
4.删除 /user/delXxxx DELETE user/Xxx
3、Api参数
可以通过Context的Param方法来获取Api参数。
冒号:
加上一个参数名组成一个路由参数,可以使用c.Prarams的方法读取其值,当然这个值是字符串string。
星号*
能匹配的规则更多。
package main
import (
"github.com/gin-gonic/gin"
"strings"
)
//路由
func main() {
r := gin.Default()
r.GET("/:name/*age", func(c *gin.Context) {
name := c.Param("name")
age := c.Param("age")
age = strings.Trim(age, "/")
c.String(200, name + " age is " + age)
})
r.Run(":8080")
}
输出结果
4、Url参数
url参数可以通过DefaultQuery()
或Query()
方法获取。
DefaultQuery()
若参数不存在,返回默认值,Query()
若不存在,返回空字符串。
query string
即路由用 ?以后连接的key1=value1&key2=value2
的形式的参数,当然这个key-value是经过urlencode编码。
package main
import (
"github.com/gin-gonic/gin"
)
//路由
func main() {
r := gin.Default()
r.GET("/user", func(c *gin.Context) {
name := c.DefaultQuery("name", "test")
age := c.Query("age")
c.String(200, name + " age is " + age)
})
r.Run(":8080")
}
浏览器访问http://127.0.0.1:8080/user?name=xiaoming&age=18 输出结果:
5、表单参数
表单传输为post请求,http常见的传输格式为四种:
- application/json
- application/x-www-form-urlencoded
- application/xml
- mulipart/form-data
表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或form-data格式的参数
package main
import (
"github.com/gin-gonic/gin"
)
//路由
func main() {
r := gin.Default()
r.POST("/form", func(c *gin.Context) {
name := c.DefaultPostForm("name", "test")
age := c.PostForm("age")
c.String(200, name + " age is " + age)
})
r.Run(":8080")
}
6、路由组
路由组是为了管理一些相同的url
package main
import (
"github.com/gin-gonic/gin"
)
//路由
func main() {
r := gin.Default()
//路由组1, 处理GET请求
v1 := r.Group("/v1")
{
v1.GET("/", Index)
v1.GET("/test", Test)
}
//路由组2,处理Post请求
v2 := r.Group("/v2")
{
v2.POST("/login", Login)
v2.POST("/submit", Submit)
}
r.Run(":8080")
}
路由组也是支持嵌套的,例如:
v1 := r.Group("/v1")
{
v1.GET("/", Index)
v1.GET("/test", Test)
//路由嵌套
xx := v1.Group("xx")
xx.GET("/xxx", XXXX)
}
7、重定向
package main
import (
"github.com/gin-gonic/gin"
)
//路由
func main() {
r := gin.Default()
/*
* 301:永久重定向
* 302:临时重定向
*/
r.GET("/index", func(c *gin.Context) {
c.Redirect(301, "https://www.baidu.com")
})
//路由重定向
r.GET("/a", func(c *gin.Context) {
c.Request.URL.Path = "/b"
r.HandleContext(c)
})
r.GET("/b", func(c *gin.Context) {
c.String(200, "Hello World")
})
r.Run(":8080")
}
本文正在参加技术专题18期-聊聊Go语言框架