各种数据格式的响应
json、结构体、XML、YAML
package mainimport ("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 intData stringMsg string}resp.Code = 200resp.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 mainimport ("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 mainimport ("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()}
