Go Web框架gin的入门教程
程序员文章站
2023-01-18 14:53:59
目前,基于go的web框架也可谓是百花齐放了,之所以选择 gin ,没其他原因,就只是因为其在github上的star数是最多的,而且仅仅从readme看,其文档也是相当丰...
目前,基于go的web框架也可谓是百花齐放了,之所以选择 gin ,没其他原因,就只是因为其在github上的star数是最多的,而且仅仅从readme看,其文档也是相当丰富的。
安装gin
直接使用 go get github.com/gin-gonic/gin 即可。
官方readme中提供了非常多的例子。例如最简单的实例代码:
package main import "github.com/gin-gonic/gin" func main() { r := gin.default() r.get("/ping", func(c *gin.context) { c.json(200, gin.h{ "message": "pong", }) }) r.run() // listen and serve on 0.0.0.0:8080 }
路由
router := gin.default() // 默认是带有logger和recovery中间件的 router := gin.new() // 不带中间件的路由 router.use(gin.logger()) // 可以使用这种方式来指明中间件 router.get("/test", mymiddleware(), testendpoint) // 也可以用这种方式给指定路由添加中间件 router.get("/someget", getting) // 支持所有restful的操作 // 带参数的路由 router.get("/user/:name", func(c *gin.context) { name := c.param("name") }) // 参数可选/通配符功能 router.get("/user/:name/*action", ...) // 路由分组 v1 := router.group("/v1") { v1.post("/login", loginendpoint) v1.post("/submit", submitendpoint) } v1.use(authrequired()) {} // 路由分组单独指定中间件
请求与响应
请求
// 获取路由参数,假设有路由为"/user/:name" c.params.byname("name") // 获取query参数 c.query("name") c.defaultquery("name", "guest") // 获取表单参数 c.postform("name") c.defaultpostform("name")
参数绑定
请求验证
响应
// 返回简单的字符串 c.string(200, "pong") // 返回json数据 c.json(200, gin.h{ "message": "pong", }) // 重定向 c.redirect(http.statusmovedpermanently, "https://google.com")
中间件
自定义中间件
basicauth中间件
异步协程
gin可以借助协程来实现异步任务,但是这时候得手动copy上下文,并且只能是可读取的。
router.get("/async", func(c *gin.context) { ccp := c.copy() go func() { time.sleep(5 * time.second) log.println("done! in path" + ccp.request.url.path) }() })
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。