路由
package main import ( "github.com/gin-gonic/gin" "time" "log") func main() { // 初始化 router := gin.New(); // 常规操作 router.POST("/", func(context *gin.Context) { context.JSON(200,"POST") }) router.GET("/", func(context *gin.Context) { context.JSON(200,"GET") }) router.DELETE("/", func(context *gin.Context) { context.JSON(200,"DELETE") }) router.PATCH("/", func(context *gin.Context) { context.JSON(200,"PATCH") }) router.PUT("/", func(context *gin.Context) { context.JSON(200,"PUT") }) router.OPTIONS("/", func(context *gin.Context) { context.JSON(200,"OPTIONS") }) router.HEAD("/", func(context *gin.Context) { context.JSON(200,"HEAD") }) // 多方式匹配 // 包括 GET, POST, PUT, PATCH, HEAD, OPTIONS, DELETE, CONNECT, TRACE router.Any("/", func(context *gin.Context) { context.JSON(200,"Any") }) // 参数 GET, POST, PUT, PATCH, DELETE router.Handle("GET","/", func(context *gin.Context) { context.JSON(200,"GET") }) // 未知路由处理 router.NoRoute(func(context *gin.Context) { context.String(404,"Not router") }) // 未知调用方式 router.NoMethod(func(context *gin.Context) { context.String(404,"Not method") }) // 静态资源返回 router.StaticFile("favicon.ico", "./resources/favicon.ico") // 静态资源目录 router.Static("/css", "/var/www/css") // GROUP // 接口版本前缀 group := router.Group("/v1") group.GET("user/info", func(context *gin.Context) { context.String(200,"username") }) // Middleware middleware := router.Group("", func(context *gin.Context) { name := context.Query("name") if(name=="admin"){ context.Redirect(302,"/home") } context.String(403,"Unauthorized") }) middleware.GET("/home", func(context *gin.Context) { context.String(200,"Api home") }) // 全局监控 loger := router.Use(func(context *gin.Context) { t := time.Now() context.Set("username", "admin") // before request context.Next() // after request latency := time.Since(t) log.Print(latency) // access the status we are sending status := context.Writer.Status() log.Println(status) }) loger.GET("/update", func(context *gin.Context) { context.String(200,"Success") }) // 启动服务 router.Run(":8080") }
输出
package mainimport ( "github.com/gin-gonic/gin")func main() { // 初始化 router := gin.New(); router.GET("about", func(context *gin.Context) { type About struct { Title string } about := About{Title:"关于我们"} context.JSON(200,about) // OUT: {"Title":"关于我们"} context.XML(200,about) // OUT: <About><Title>关于我们</Title></About> context.YAML(200,about) // Download YAML // 模板路径 router.LoadHTMLGlob("tmp/*") // 渲染模板 g.H map[string] 变量带入 context.HTML(200,"about.html",gin.H{ "title": "Posts", }) // OUT about.html context.String(200,"关于我们%s","!") // OUT "关于我们!" // 跳转 context.Redirect(302,"/home") // 指定ContentType context.Data(200,"text/html;charset=utf-8",[]byte("<h1>title</h1>")) // OUT "<h1>title</h1>" // 格式化输出 context.IndentedJSON(200,about) /* OUT: { "Title": "关于我们" } */ }) // 启动服务 router.Run(":8080") }
变量
curl -X POST -i -d "type=3" "/admin/head?id=1&type=2"
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Date: Thu, 19 Apr 2018 13:02:31 GMT
Content-Length: 43
OUT: path param name:admin attr:/head id:1 type:3%
package mainimport ( "github.com/gin-gonic/gin")func main() { // 初始化 router := gin.New(); router.POST("/:name/*attr", func(context *gin.Context) { context.String(200, "path param name:%s attr:%s id:%s type:%s", context.Param("name"), context.Param("attr"), context.Query("id"), context.PostForm("type")) }) // 启动服务 router.Run(":8080") }
作者:保儿洁
链接:https://www.jianshu.com/p/d4b52187d233