各种数据格式的响应
json、结构体、XML、YAML
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/json", func(c *gin.Context) {
c.JSON(200, gin.H{"code": 200, "data": "json", "msg": "success"})
})
r.GET("/struct", func(c *gin.Context) {
var resp struct {
Code int
Data string
Msg string
}
resp.Code = 200
resp.Data = "struct"
resp.Msg = "success"
c.JSON(200, resp)
})
r.GET("/xml", func(c *gin.Context) {
c.XML(200, gin.H{"code": 200, "data": "json", "msg": "success"})
})
r.GET("/yaml", func(c *gin.Context) {
c.YAML(200, gin.H{"code": 200, "data": "json", "msg": "success"})
})
r.Run()
}
HTML模板渲染
重定向
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/index", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://127.0.0.1:8008")
})
r.Run()
}
同步异步
goroutine机制可以很方便的实现异步处理
在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本
package main
import (
"log"
"time"
"github.com/gin-goinc/gin"
)
func main() {
r := gin.Default()
// 异步
r.GET("/async", func(c *gin.Context) {
copyContext := c.Copy()
go func() {
time.Sleep(time.Second * 3)
log.Println("异步执行:" + copyContext.Reuqest.URL.Path)
}
})
// 同步
r.GET("/sync", func(c *gin.Context) {
time.Sleep(time.Second * 3)
log.Println("同步执行:" + c.Request.URL.Path)
})
r.Run()
}