Gin 框架中的路由
# 1、路由概述
路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。
RESTful API 是目前比较成熟的一套互联网应用程序的 API 设计理论,所以我们设计我们的路由的时候建议参考 RESTful API 指南。
在 RESTful 架构中,每个网址代表一种资源,不同的请求方式表示执行不同的操作:
方法 | 操作 | 说明 |
---|---|---|
GET | SELECT | 从服务器取出资源(一项或多项) |
POST | CREATE | 在服务器新建一个资源 |
PUT | UPDATE | 在服务器更新资源(客户端提供改变后的完整资源) |
DELETE | DELETE | 从服务器删除资源 |
# 2、简单的路由配置
简单的路由配置(可以通过 postman 测试)
当用 GET 请求访问一个网址的时候,做什么事情:
r.GET("网址", func(c *gin.Context) {
c.String(200, "Get")
})
当用 POST 访问一个网址的时候,做什么事情:
r.POST("网址", func(c *gin.Context) {
c.String(200, "POST")
})
当用 PUT 访问一个网址的时候,执行的操作:
r.PUT("网址", func(c *gin.Context) {
c.String(200, "PUT")
})
当用 DELETE 访问一个网址的时候,执行的操作:
r.DELETE("网址", func(c *gin.Context) {
c.String(200, "DELETE")
})
# 路由里面获取 Get 传值
域名/news?aid=20
r.GET("/news", func(c *gin.Context) {
aid := c.Query("aid")
c.String(200, "aid=%s", aid)
})
# 动态路由
域名/user/20
r.GET("/user/:uid", func(c *gin.Context) {
uid := c.Param("uid")
c.String(200, "userID=%s", uid)
})
# 3、c.String() c.JSON() c.JSONP() c.XML() c.HTML()
返回一个字符串
r.GET("/news", func(c *gin.Context) {
aid := c.Query("aid")
c.String(200, "aid=%s", aid)
})
返回一个 JSON 数据
func main() {
r := gin.Default()
// gin.H 是 map[string]interface{}的缩写
r.GET("/someJSON", func(c *gin.Context) {
// 方式一:自己拼接 JSON
c.JSON(http.StatusOK, gin.H{"message": "Hello world!"})
})
r.GET("/moreJSON", func(c *gin.Context) {
// 方法二:使用结构体
var msg struct {
Name string `json:"user"`
Message string
Age int
}
msg.Name = "IT 营学院"
msg.Message = "Hello world!"
msg.Age = 18
c.JSON(http.StatusOK, msg)
})
r.Run(":9090")
}
JSOPN
func main() {
r := gin.Default()
r.GET("/JSONP", func(c *gin.Context) {
data := map[string]interface{}{"foo": "bar"}
// /JSONP?callback=x
// 将输出:x({\"foo\":\"bar\"})
c.JSONP(http.StatusOK, data)
})
r.Run(":9090")
}
返回 XML 数据
func main() {
r := gin.Default()
// gin.H 是 map[string]interface{}的缩写
r.GET("/someXML", func(c *gin.Context) {
// 方式一:自己拼接 JSON
c.XML(http.StatusOK, gin.H{"message": "Hello world!"})
})
r.GET("/moreXML", func(c *gin.Context) {
// 方法二:使用结构体
type MessageRecord struct {
Name string
Message string
Age int
}
var msg MessageRecord
msg.Name = "IT 营学院"
msg.Message = "Hello world!"
msg.Age = 18
c.XML(http.StatusOK, msg)
})
r.Run(":9090")
}
渲染模板
router.GET("/", func(c *gin.Context) {
c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{ "title": "前台首页"
})
})
上次更新: 2025/03/23, 22:36:48