gin框架教程代码地址:

我们在用http的时候一般都会用一些web框架来进行开发,gin就是这样的一个框架,它有哪些特点呢

一:gin特点

1、性能优秀
2、基于官方的net/http的有限封装
3、方便 灵活的中间件
4、数据绑定很强大
5、社区比较活跃
等等

二:gin的安装

安装:
go get github.com/gin-gonic/gin

如果要更新:
go get -u github.com/gin-gonic/gin

三:gin的使用

1、入门的第一个示例

先来写出一个例子:example1.go

  1. package main
  2.  
  3. import (
  4. "github.com/gin-gonic/gin"
  5. )
  6.  
  7. func main() {
  8. r := gin.Default()
  9. r.GET("/ping", func(c *gin.Context) {
  10. c.JSON(, gin.H{
  11. "message": "pong",
  12. })
  13. })
  14. r.Run() //listen and serve on 0.0.0.0:8080
  15. }

a. 然后运行 go run example1.go 之后,
b. 在浏览器上输入:http://localhost:8080/ping
输出结果:
{"message":"pong"}

2: gin的基本路由

  1. // 创建带有默认中间件的路由:
  2. r := gin.Default()
  3. //创建不带中间件的路由:
  4. //r := gin.New()
  5. r.GET("/someGet", getting)
  6. r.POST("/somePost", posting)
  7. r.PUT("/somePut", putting)
  8. r.DELETE("/someDelete", deleting)
  9. r.PATCH("/somePatch", patching)
  10. r.HEAD("/someHead", head)
  11. r.OPTIONS("/someOptions", options)

3、获取路由的参数

3.1 Parameters in path
编写param1.go文件

  1. package main
  2.  
  3. import (
  4. "github.com/gin-gonic/gin"
  5. "net/http"
  6. )
  7.  
  8. func main() {
  9. r := gin.Default()
  10.  
  11. //这个能匹配 /user/tom , 但是不能匹配 /user/ 或 /user
  12. r.GET("/user/:name", func(c *gin.Context) {
  13. name := c.Param("name")
  14. c.String(http.StatusOK, "Hello %s", name)
  15. })
  16.  
  17. //有一个方法可以匹配 /user/tom, 也可以匹配 /user/tom/send
  18. //如果没有任何了路由匹配 /user/tom, 它将会跳转到 /user/tom/
  19. r.GET("/user/:name/*action", func(c *gin.Context) {
  20. name := c.Param("name")
  21. action := c.Param("action")
  22. message := name + " is " + action
  23. c.String(http.StatusOK, message)
  24. })
  25.  
  26. r.Run(":8080")
  27. }

a. 然后运行 go run param1.go 之后,

b. 在浏览器上输入:http://localhost:8080/user/tom
输出结果:Hello tom

c. 在浏览器上输入:http://localhost:8080/user/tom/
输出结果:tom is /

d. 在浏览器上输入:http://localhost:8080/user/tom/pig
输出结构: tom is /pig

3.2 query param
一般匹配这种形式的url /welcome?firstname=Jane&lastname=Doe

  1. package main
  2.  
  3. //Querystring parameters
  4.  
  5. import (
  6. "github.com/gin-gonic/gin"
  7. "net/http"
  8. )
  9.  
  10. func main() {
  11. r := gin.Default()
  12. r.GET("/welcome", func(c *gin.Context) {
  13. firstname := c.DefaultQuery("firstname", "Guest") //如果没有值,还可以给一个默认值
  14. lastname := c.Query("lastname")
  15. c.String(http.StatusOK, "Hello %s %s ", firstname, lastname)
  16. })
  17. r.Run(":8080")
  18. }

a. 然后运行 go run param2.go 之后,
b. 在浏览器上输入:http://localhost:8080/welcome?lastname=jimmy
输出结果:Hello Guest jimmy

c. 在浏览器上输入:http://localhost:8080/welcome?lastname=jimmy&firstname=tom
输出结果:Hello tom jimmy

3.3 表单参数 Form
Multipart/Urlencoded Form

  1. package main
  2.  
  3. import (
  4. "github.com/gin-gonic/gin"
  5. // "net/http"
  6. )
  7.  
  8. func main() {
  9. r := gin.Default()
  10. r.POST("/form_post", func(c *gin.Context) {
  11. message := c.PostForm("message")
  12. nick := c.DefaultPostForm("nick", "guest")
  13.  
  14. c.JSON(, gin.H{
  15. "status": "posted",
  16. "message": message,
  17. "nick": nick,
  18. })
  19. })
  20.  
  21. r.Run(":8080")
  22. }

可以用postman来测试一下, 测试结果如下:

3.4 混合型的query + post form

  1. package main
  2.  
  3. import (
  4. // "fmt"
  5. "github.com/gin-gonic/gin"
  6. )
  7.  
  8. /*
  9. POST /post?id=1234&page=1 HTTP/1.1
  10. Content-Type: application/x-www-form-urlencoded
  11.  
  12. name=manu&message=this_is_great
  13. */
  14. func main() {
  15. r := gin.Default()
  16. r.POST("/post", func(c *gin.Context) {
  17. id := c.Query("id")
  18. page := c.DefaultQuery("page", "")
  19. name := c.PostForm("name")
  20. message := c.PostForm("message")
  21.  
  22. // fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)
  23. c.JSON(, gin.H{
  24. "id": id,
  25. "page": page,
  26. "name": name,
  27. "message": message,
  28. })
  29. })
  30.  
  31. r.Run(":8080")
  32. }

用postman测试结果如下:

4:解析数据绑定

我们可以给一个请求的数据绑定到一个类型,gin支持绑定的类型有JSON,XML和标准的表单数据(foo=bar&boo=baz)。 注意绑定时需要设置绑定类型的标签。比如绑定json数据时,
设置 json:"fieldname"

  1. package main
  2.  
  3. import (
  4. "github.com/gin-gonic/gin"
  5. "net/http"
  6. )
  7.  
  8. // Binding from JSON
  9. type User struct {
  10. Username string `form:"username" json:"username" binding:"required"`
  11. Password string `form:"password" json:"password" binding:"required"`
  12. Age int `form:"age" json:"age"`
  13. }
  14.  
  15. func main() {
  16. r := gin.Default()
  17. // Example for binding JSON ({"username": "manu", "password": "123"})
  18. r.POST("/loginJSON", func(c *gin.Context) {
  19. var json User
  20.  
  21. if err := c.ShouldBindJSON(&json); err == nil {
  22. if json.Username == "manu" && json.Password == "" {
  23. c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
  24. } else {
  25. c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized", "username": json.Username, "pass": json.Password})
  26. }
  27. } else {
  28. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  29. }
  30. })
  31. // Example for binding a HTML form (user=manu&password=123)
  32. r.POST("/loginForm", func(c *gin.Context) {
  33. var form User
  34. if err := c.ShouldBind(&form); err != nil {
  35. if form.Username == "manu" && form.Password == "" {
  36. c.JSON(http.StatusOK, gin.H{"status": "you are logged in 2"})
  37. } else {
  38. c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized 2"})
  39. }
  40. } else {
  41. c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
  42. }
  43. })
  44. r.Run(":8080")
  45. }

还有一些其他的应用,可以参考:

https://github.com/gin-gonic/gin/blob/master/README.md

go框架gin的使用的更多相关文章

  1. Go语言web框架 gin

    Go语言web框架 GIN gin是go语言环境下的一个web框架, 它类似于Martini, 官方声称它比Martini有更好的性能, 比Martini快40倍, Ohhhh….看着不错的样子, 所 ...

  2. GO语言web框架Gin之完全指南

    GO语言web框架Gin之完全指南 作为一款企业级生产力的web框架,gin的优势是显而易见的,高性能,轻量级,易用的api,以及众多的使用者,都为这个框架注入了可靠的因素.截止目前为止,github ...

  3. Golang 微框架 Gin 简介

    框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应 ...

  4. httprouter框架 (Gin使用的路由框架)

    之前在Gin中已经说到, Gin比Martini的效率高好多耶, 究其原因是因为使用了httprouter这个路由框架, httprouter的git地址是: httprouter源码. 今天稍微看了 ...

  5. Go组件学习——Web框架Gin

    以前学Java的时候,和Spring全家桶打好关系就行了,从Spring.Spring MVC到SpringBoot,一脉相承. 对于一个Web项目,使用Spring MVC,就可以基于MVC的思想开 ...

  6. gin框架教程一: go框架gin的基本使用

    我们在用http的时候一般都会用一些web框架来进行开发,gin就是这样的一个框架,它有哪些特点呢 一:gin特点 1.性能优秀2.基于官方的net/http的有限封装3.方便 灵活的中间件4.数据绑 ...

  7. GO语言web框架Gin之完全指南(二)

    这篇主要讲解自定义日志与数据验证 参数验证 我们知道,一个请求完全依赖前端的参数验证是不够的,需要前后端一起配合,才能万无一失,下面介绍一下,在Gin框架里面,怎么做接口参数验证的呢 gin 目前是使 ...

  8. GO语言web框架Gin之完全指南(一)

    作为一款企业级生产力的web框架,gin的优势是显而易见的,高性能,轻量级,易用的api,以及众多的使用者,都为这个框架注入了可靠的因素.截止目前为止,github上面已经有了 35,994 star ...

  9. go语言框架gin之集成swagger

    1.安装swag 在goLand中直接使用go get -u github.com/swaggo/swag/cmd/swag命令安装会报错 翻了很多博客,都没找到太合适的办法,根据博客中所写的操作还是 ...

随机推荐

  1. Oracle 查询两个时间段内的所有日期列表

    1.查询某时间段内日期列表 select level,to_char(to_date('2013-12-31','yyyy-mm-dd')+level-1,'yyyy-mm-dd') as date_ ...

  2. css伪元素之before和after

    css里面的伪元素主要是用来给选择器设置特殊效果.根据常用性,记录before和after. “:before”伪元素用来在元素的内容前面添加新的元素.比如标题前面会有一个小方块,就可以通过‘ :be ...

  3. caffemodel模型

    resnet18 https://github.com/HolmesShuan/ResNet-18-Caffemodel-on-ImageNet

  4. 安装.Net Standard 2.0, Impressive

    此版本的.NET Standard现在支持大约33K的API,与.NET Standard 1.x支持的14K API相比.好的是大部分API来自.NET Framework.这使得生活更容易将代码移 ...

  5. 【NLP】Recurrent Neural Network and Language Models

    0. Overview What is language models? A time series prediction problem. It assigns a probility to a s ...

  6. Spring IOC注入接口多实现解决

    前期面试的时候被面试官问到,Spring注入某接口,而接口有多实现,应该如何处理.接口多实现很常见,但在业务逻辑开发中,需要考虑注入某接口的多个实现问题的情况并不多见.当时是一脸懵逼,目前有时间,就做 ...

  7. mfs 使用心得

    CentOS的安装方法: To install MooseFS from officially supported repository on EL7, follow the steps below: ...

  8. HDU4460-Friend Chains-BFS+bitset优化

    bfs的时候用bitset优化一下. 水题 #include <cstdio> #include <cstring> #include <algorithm> #i ...

  9. Escape HDU - 3605(归类建边)

    Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  10. 0-1背包 VIOJ1025

    P1025小飞侠的游园方案 请 登录 后递交 标签:[显示标签] 描述 菜虫:你的题目是--我们的情报组织探听到敌人的重要将领--小飞侠星期天会邀他的灵儿妹妹到公园去玩.公园里有很多娱乐项目,可并不是 ...