欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go Web框架gin的入门教程

程序员文章站 2023-12-24 22:08:33
目前,基于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)
  }()
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: