当前位置: 首页 > news >正文

GIN

gin是什么 

Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。如果你需要极好的性能,使用 Gin 吧。

特点:gin是golang的net/http库封装的web框架,api友好,注释明确,具有快速灵活,容错方便等特点。

go其他web框架:

  • beego:开源的高性能Go语言Web框架。
  • Iris:全宇宙最快的Go语言Web框架,支持MVC。

gin的安装

        go语言包的安装都十分简单,对与gin的安装,仅需要一行命令(开启go mod,并且配置了正确的代理)

  go get -u github.com/gin-gonic/gin

gin框架中文文档:https://gin-gonic.com/zh-cn/docs/

gin的使用

使用gin创建一个hello world网页

package mainimport "github.com/gin-gonic/gin"func main() {router := gin.Default()router.GET("/hello", func(c *gin.Context) {c.JSON(200, gin.H{"message": "Hello World!"})})router.Run("127.0.0.1:8080")
}

启动成功:

 十分的快捷简单!!!!😆😆😆😆

RESTful API

55RESTful:用url去定位资源、用HTTP动词GET、POST、DELETE、PUT去描述操作。

RESTful API就是REST风格的API,rest是一种架构风格,跟编程语言无关,跟平台无关,采用HTTP做传输协议。

REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。

  • GET获取资源
  • POST新建资源
  • PUT更新资源
  • DELETE删除资源

只要API程序遵循了REST风格,就可以成为RESTful API。

Gin框架支持RESTful API的开发

	router.GET("/get", func(c *gin.Context) {c.JSON(200, gin.H{"message": "get"})})router.POST("/post", func(c *gin.Context) {c.JSON(200, gin.H{"message": "post"})})router.PUT("/put", func(c *gin.Context) {c.JSON(200, gin.H{"message": "put"})})router.DELETE("/delete", func(c *gin.Context) {c.JSON(200, gin.H{"message": "delete"})})

 

响应HTML页面

目录:

main.go

package mainimport ("github.com/gin-gonic/gin""github.com/thinkerou/favicon""net/http"
)func main() {router := gin.Default()router.GET("/index", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{"message": "myHTML",})})// Gin框架中使用LoadHTMLGlob()或者LoadHTMLFiles()方法进行HTML模板渲染。//router.LoadHTMLGlob("template/*")router.LoadHTMLFiles("template/index.html")// 当我们渲染的HTML文件中引用了静态文件时// 我们只需要按照以下方式在渲染页面前调用gin.Static方法即可。router.Static("/static", "./static")router.Run("127.0.0.1:8080")
}

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>我的Go页面</title><link rel="stylesheet" href="/static/css/style.css"><script src="/static/js/common.js"></script>
</head>
<body><h1>首页</h1>
</body>
</html>

 style.css

body {background: rosybrown;
}

 

        css,js之后也会出文章

JSON响应

1、返回普通数据类型

router.GET("/hello", func(c *gin.Context) {c.JSON(200,"request success")})

2、返回结构体

	router.GET("/hello", func(c *gin.Context) {user := struct {Username string `json:"username"`PassWord string `json:"password"`}{Username: "zhangsan",PassWord: "123456",}c.JSON(http.StatusOK, user)})

3、返回map

	router.GET("/hello", func(c *gin.Context) {type user struct {Username string `json:"username"`PassWord string `json:"password"`}m := map[int]user{}m[1] = user{"zhangsan", "123456"}m[2] = user{"lisi", "123456"}c.JSON(http.StatusOK, m)})

4、返回切片结构体

	router.GET("/hello", func(c *gin.Context) {type user struct {Username string `json:"username"`PassWord string `json:"password"`}users := make([]user, 2)users[0] = user{"zhangsan", "123456"}users[1] = user{"lisi", "123456"}c.JSON(http.StatusOK, users)})

获取请求参数

1、获取url中的参数

        当form表单中的method属性为get我们提交的字段值会显示在url中

	router.GET("/login", func(c *gin.Context) {c.HTML(200, "login.html", nil)})router.LoadHTMLGlob("template/*")

获取url中的参数方法:

	router.GET("/login", func(c *gin.Context) {username := c.Query("username")password, ok := c.GetQuery("password")if !ok {password = "获取password失败"}c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})})

2、接收restful风格的参数

请求的参数通过URL路径传递,例如:/login/zhangsan/123456。 获取请求URL路径中的参数的方式如下。

	router.GET("/login/:username/:password", func(c *gin.Context) {// 通过 param 获取参数username := c.Param("username")password := c.Param("password")//返回json数据c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})})

3、接收form表单提交的数据

	router.POST("/login", func(c *gin.Context) {username := c.PostForm("username")password := c.PostForm("password")c.JSON(http.StatusOK, gin.H{"username": username,"password": password,})})

4、获取json参数

当前端请求的数据通过JSON提交时,例如向/json发送一个POST请求,则获取请求参数的方式如下:

// 编写请求
router.POST("/json", func(c *gin.Context) {// GetRawData : 从c.Request.Body读取请求数据, 返回 []byteb, _ := c.GetRawData()// 定义map或结构体接收var m map[string]interface{}// 包装为json数据_ = json.Unmarshal(b, &m)c.JSON(http.StatusOK, m)
})

路由

1、重定向

http重定向

	//重定向router.GET("/test", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "http://www.google.com")})

2、路由重定向

	router.GET("/test", func(c *gin.Context) {c.Request.URL.Path = "/test2"router.HandleContext(c)})router.GET("/test2", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "test2"})})

3、404页面

没有匹配到路由的请求都返回404.html页面。

	router.NoRoute(func(c *gin.Context) {c.HTML(http.StatusNotFound, "404.html", nil)})

4、路由组

我们可以将拥有共同URL前缀的路由划分为一个路由组,也可以多重嵌套。

package mainimport "github.com/gin-gonic/gin"func Group(router *gin.Engine) {userGroup := router.Group("/user"){ //习惯性一对`{}`包裹同组的路由,这只是为了看着清晰,你用不用`{}`包裹功能上没什么区别userGroup.GET("/1", func(c *gin.Context) {}) //   /user/1userGroup.GET("/2", func(c *gin.Context) {}) //   /user/2userGroup.GET("/3", func(c *gin.Context) {}) //   /user/3}
}


http://www.mrgr.cn/news/80583.html

相关文章:

  • 使用 Vue3 实现摄像头拍照功能
  • Ajax简单理解
  • springboot controller get 如何获取参数
  • 【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string
  • 概率论得学习和整理22:EXCEL数据清洗的几个功能总结备忘
  • Ajax与Axios总结
  • Latex 转换为 Word(使用GrindEQ )(英文转中文,毕业论文)
  • ubuntu升级python版本
  • 15.初始接口1.0 C#
  • Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例
  • Yolo中OBB的角度范围和角度损失设计思路
  • flink SQL实现mysql source sink
  • 面试题整理2---Nginx 性能优化全方案
  • next.js 存在缓存中毒漏洞(CVE-2024-46982)
  • Qt之修改窗口标题、图标以及自定义标题栏(九)
  • 登陆harbor发现证书是错误的, 那么如何更新harbor的证书呢
  • day4:tomcat—maven-jdk
  • SQL server学习07-查询数据表中的数据(下)
  • 24-12 空间转录组数据分析之分子niche与细胞niche
  • 【信息系统项目管理师-论文真题】2015下半年论文详解(包括解题思路和写作要点)
  • window.getSelection() 获取划线内容并实现 dom 追随功能
  • 实战 | 某院校小程序记录
  • vue3 v-model实例之二,tab标签页的实现
  • 奇怪的知识又增加了,ESP32下的Lisp编程:ULisp--Lisp for microcontrollers
  • RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGB
  • 电源的分类