源码
github.com/zsl10/gin-e…
常见响应
r.GET("/res/string", func(c *gin.Context) {
c.String(http.StatusOK, "success")
})
// 1) 使用gin.H,本质是 map[string]interface{}
r.GET("/res/json/1", func(c *gin.Context) {
// 输出头格式为 application/json; charset=UTF-8 的 json 字符串
c.JSON(http.StatusOK, gin.H{"message": "json1", "status": 200})
})
// 2) 使用结构体响应
r.GET("/res/json/2", func(c *gin.Context) {
var user struct {
Name string
Message string
Number int
}
user.Name = "zsl10"
user.Message = "hello"
user.Number = 123
c.JSON(200, user)
})
// 3.输出XML
r.GET("/res/xml", func(c *gin.Context) {
c.XML(200, gin.H{"user":"zsl10","msg": "ok"})
})
// 4.YAML响应
r.GET("/res/yaml", func(c *gin.Context) {
c.YAML(200, gin.H{"name": "zsl10","msg":"ok"})
})
//加载模板
r.LoadHTMLGlob("templates/*")
//定义路由
r.GET("/index", func(c *gin.Context) {
//根据完整文件名渲染模板,并传递参数
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"title": "hello world",
})
})
// 1)异步
r.GET("/async", func(c *gin.Context) {
// goroutine 中只能使用只读的上下文 c.Copy()
cCp := c.Copy()
go func() {
time.Sleep(5 * time.Second)
log.Println("Done! in path " + cCp.Request.URL.Path)
}()
})
// 2)同步
r.GET("/sync", func(c *gin.Context) {
time.Sleep(5 * time.Second)
log.Println("Done! in path " + c.Request.URL.Path)
})