Go web框架Gin的简单应用

简单记录一下Go web框架Gin的应用:

在 Go语言开发的 Web 框架中,有两款著名 Web 框架分别是 Martini 和 Gin,两款 Web 框架相比较的话,Gin 自己说它比 Martini 要强很多。gin是用一个go语言编写,基于httprouter开发的web框架。由于使用了httprouter,速度提高了将近40倍。
Gin 是 Go语言写的一个 web 框架,它具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json。总之在 Go语言开发领域是一款值得好好研究的 Web 框架,开源网址:https://github.com/gin-gonic/gin

gin 的功能不只是简单输出 Json 数据。它是一个轻量级的 WEB 框架,支持 RestFull 风格 API,支持 GET,POST,PUT,PATCH,DELETE,OPTIONS 等 http 方法,支持文件上传,分组路由,Multipart/Urlencoded FORM,以及支持 JsonP,参数处理等等功能,这些都和 WEB 紧密相关,通过提供这些功能,使开发人员更方便地处理 WEB 业务。

Gin 是一个用 Golang编写的 高性能的web 框架, 由于http路由的优化,速度提高了近 40 倍。 Gin的特点就是封装优雅、API友好。

Gin的一些特性:

  • 快速 基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。

  • 支持中间件 传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。

  • Crash 处理 Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!

  • JSON 验证 Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。

  • 路由组 更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。

  • 错误管理 Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。

  • 内置渲染 Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。

  • 可扩展性 新建一个中间件非常简单。

先贴代码:

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

type Person struct { //Person的结构体变量
	Number string `form:"number" json:"Number"`
	Name   string `form:"name" json:"Name"`
	Age    string `form:"age" json:"Age"`
}
type ID struct { //用来接收id的值
	Id string `form:"id"` //这里记住,变量开头字母要大写!不然就外部不能访问!类似于java的public
}

func main() {
	r := gin.Default()
	persons := []Person{} //全局变量,用来存储person的数据
	userGroup := r.Group("/put")
	userGroup.POST("/putperson", func(c *gin.Context) {
		person := Person{}
		c.ShouldBind(&person)
		fmt.Println(person)
		persons = append(persons, person)
		fmt.Println("现在persons存在的数据有:", persons)
		c.JSON(200, person)
	})
	menuGroup := r.Group("/show")
	menuGroup.POST("/showpersons", func(c *gin.Context) {
		c.JSON(200, persons)
	})
	menuGroup.POST("/showpersonsbynumber", func(c *gin.Context) {
		id := ID{}
		c.ShouldBind(&id)
		fmt.Println("你输入的id是:", id.Id)
		for i := 0; i < len(persons); i++ {
			if id.Id == persons[i].Number {
				fmt.Println(persons[i])
				c.JSON(200, persons[i])
				break
			}
		}
		c.JSON(200, "没有找到对应的person!")
	})

	r.Run(":8090") // 监听并在 0.0.0.0:8090 上启动服务
}

解析:

这是定义的结构体,第一个是我们主体变量的结构体,第二个是用来接收id的结构体。

type Person struct { //Person的结构体变量
	Number string `form:"number" json:"Number"`
	Name   string `form:"name" json:"Name"`
	Age    string `form:"age" json:"Age"`
}
type ID struct { //用来接收id的值
	Id string `form:"id"` //这里记住,变量开头字母要大写!不然就外部不能访问!类似于java的public
}

此函数用来存数据:

 接下来的是查数据的:

可以查看所有的数据也可以格局id值查询特定的数据值。

 最后是监听的端口号:

 接下来进行测试:

启动服务:

 存入数据:

 进行查询所有数据:

 根据id查数据:

猜你喜欢

转载自blog.csdn.net/lakersssss24/article/details/126904487