gin框架长连接_gin框架教程一: go框架gin的基本使用
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
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
}
a. 然后运行 go run example1.go 之后,
b. 在浏览器上输入:http://localhost:8080/ping
输出结果:
{"message":"pong"}
2: gin的基本路由
//创建带有默认中间件的路由:
r :=gin.Default()//创建不带中间件的路由://r := gin.New()
r.GET("/someGet", getting)
r.POST("/somePost", posting)
r.PUT("/somePut", putting)
r.DELETE("/someDelete", deleting)
r.PATCH("/somePatch", patching)
r.HEAD("/someHead", head)
r.OPTIONS("/someOptions", options)
3、获取路由的参数
3.1 Parameters in path
编写param1.go文件
package main
import ("github.com/gin-gonic/gin"
"net/http")
func main() {
r :=gin.Default()//这个能匹配 /user/tom , 但是不能匹配 /user/ 或 /user
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK,"Hello %s", name)
})//有一个方法可以匹配 /user/tom, 也可以匹配 /user/tom/send//如果没有任何了路由匹配 /user/tom, 它将会跳转到 /user/tom/
r.GET("/user/:name/*action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + "is" +action
c.String(http.StatusOK, message)
})
r.Run(":8080")
}
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
package main//Querystring parameters
import ("github.com/gin-gonic/gin"
"net/http")
func main() {
r :=gin.Default()
r.GET("/welcome", func(c *gin.Context) {
firstname := c.DefaultQuery("firstname", "Guest") //如果没有值,还可以给一个默认值
lastname := c.Query("lastname")
c.String(http.StatusOK,"Hello %s %s", firstname, lastname)
})
r.Run(":8080")
}
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
package main
import ("github.com/gin-gonic/gin"
//"net/http"
)
func main() {
r :=gin.Default()
r.POST("/form_post", func(c *gin.Context) {
message := c.PostForm("message")
nick := c.DefaultPostForm("nick", "guest")
c.JSON(200, gin.H{"status": "posted","message": message,"nick": nick,
})
})
r.Run(":8080")
}
可以用postman来测试一下, 测试结果如下:
3.4 混合型的query + post form
package main
import (//"fmt"
"github.com/gin-gonic/gin")/*POST /post?id=1234&page=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
name=manu&message=this_is_great*/func main() {
r :=gin.Default()
r.POST("/post", func(c *gin.Context) {
id := c.Query("id")
page := c.DefaultQuery("page", "0")
name := c.PostForm("name")
message := c.PostForm("message")//fmt.Printf("id: %s; page: %s; name: %s; message: %s", id, page, name, message)
c.JSON(200, gin.H{"id": id,"page": page,"name": name,"message": message,
})
})
r.Run(":8080")
}
用postman测试结果如下:
4:解析数据绑定
我们可以给一个请求的数据绑定到一个类型,gin支持绑定的类型有JSON,XML和标准的表单数据(foo=bar&boo=baz)。 注意绑定时需要设置绑定类型的标签。比如绑定json数据时,
设置 json:"fieldname"
package main
import ("github.com/gin-gonic/gin"
"net/http")//Binding from JSON
type User struct{
Usernamestring `form:"username" json:"username" binding:"required"`
Passwordstring `form:"password" json:"password" binding:"required"`
Ageint `form:"age" json:"age"`
}
func main() {
r :=gin.Default()//Example for binding JSON ({"username": "manu", "password": "123"})
r.POST("/loginJSON", func(c *gin.Context) {varjson Userif err := c.ShouldBindJSON(&json); err ==nil {if json.Username == "manu" && json.Password == "123"{
c.JSON(http.StatusOK, gin.H{"status": "you are logged in"})
}else{
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized", "username": json.Username, "pass": json.Password})
}
}else{
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})//Example for binding a HTML form (user=manu&password=123)
r.POST("/loginForm", func(c *gin.Context) {varform Userif err := c.ShouldBind(&form); err !=nil {if form.Username == "manu" && form.Password == "123"{
c.JSON(http.StatusOK, gin.H{"status": "you are logged in 2"})
}else{
c.JSON(http.StatusUnauthorized, gin.H{"status": "unauthorized 2"})
}
}else{
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
}
})
r.Run(":8080")
}
还有一些其他的应用,可以参考:
gin框架长连接_gin框架教程一: go框架gin的基本使用相关推荐
- 高效 保活长连接:手把手教你实现 自适应的心跳保活机制
前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 1. ...
- android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...
前言 当实现具备实时性需求时,我们一般会选择长连接的通信方式 而在实现长连接方式时,存在很多性能问题,如 长连接保活 今天,我将 手把手教大家实现自适应的心跳保活机制,从而能高效维持长连接 目录 示意 ...
- gin框架长连接_一个TCP长连接设备管理后台工程(一)
概述 这个项目最初只是用来进行一个简单的协议测试用的,而且是一个纯粹的后端命令行工程.只是后面想着只有命令行,操作也不太方便,于是便有了添加一个ui的想法. golang项目要配ui,最佳的还是配一个 ...
- gin框架长连接_[Golang] Gin框架学习笔记
0x0 Gin简介 1.Gin 是什么? Gin 是一个用 Go (Golang) 编写的 HTTP web 框架. 它是一个类似于 martini 但拥有更好性能的 API 框架, 由于 httpr ...
- MySQL之长连接、短连接、连接池(转载:http://www.ywnds.com/?p=9801)
当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信.客户端必须使用数据库连接来发送命令和接收应答.数据.通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了. ...
- MySQL性能优化知识:长连接、短连接、连接池
当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信.客户端必须使用数据库连接来发送命令和接收应答.数据.通过提供给客户端数据库的驱动指定连接字符串后,客户端就可以和数据库建立连接了. ...
- 【TCP长连接】使用TCP长连接提升服务性能
1.概述 在<性能优化篇-理论基础>中,我们知道了提升服务性能的两个思路,分别是提升服务并发能力和降低请求的响应时间(RT).一个请求的响应时间包括两部分,等待时间和执行时间.在<性 ...
- 【性能优化】网络编程 - PHP - 使用TCP长连接的一种优化思路 - 学习/实践
1.应用场景 主要了解学习如何基于PHP使用TCP长连接的一种优化思路. 2.学习/参考 文档阅读 PHP - CGI, Fast-FGI, PHP-FPM - 学习/实践 php使用tcp长连接的一 ...
- python使用socket实现协议TCP长连接框架
点击上方↑↑↑蓝字[协议分析与还原]关注我们 " 使用python实现协议中常见的TCP长连接框架." 分析多了协议就会发现,很多的应用,特别是游戏类和IM类应用,它们的协议会使用 ...
最新文章
- 【学时总结】◆学时·VIII◆ 树形DP
- python求函数曲率_【Python】车道线拟合曲线的曲率半径计算公式及代码
- GDCM:gdcm::Decoder的测试程序
- 10月13日学习内容整理:线程,创建线程(threading模块),守护线程,GIL(全局解释器互斥锁)...
- 化学到底有多难难难难!为了让学生搞懂化学,竟然...
- stm32 I2C架构
- JavaScript基础之'script'Tag的使用
- exc导入mysql phpcms_PHP如何将EXCEL导入MYSQL,急!!!急!!哪位大师能帮帮忙啊,给个详细代码...
- python用什么来写模块-用Python编写模块有何技巧?
- 51单片机仿真——蜂鸣器
- 【C++】代码实现:数据线性平滑算法:3点线性平滑、5点(1次、2次、3次)线性平滑、7点(1次、2次)线性平滑
- 基于ZYNQ wifi方案实现与测试
- 2021-2027全球及中国G Suite销售软件行业研究及十四五规划分析报告
- 解决对话框的圆角背景图片黑色部分
- 【lepus】开源数据库监控rhel8.4安装教程(包含开机脚本)
- @Deprecated的使用
- Android 9.0 wifi的随机mac地址修改为固定不变
- 工程建设项目全套流程,门清!
- 人工蜂群算法(ABC算法)
- 带你全面掌握高级知识点!一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的?年薪50W
热门文章
- “不允许对64位应用程序进行修改”的解决方法 --“Changes to 64-bit applications are not allowed.”
- 【玩转server 2019系列】Windows server 2019打开windows defender提示“需要新应用打开windows defender”的解决方法
- 安装.Net Framework 4.6.2时出现“无法建立到信任根颁发机构的证书链”解决方法
- pip安装提示PermissionError: [WinError 5]错误问题解决
- fastJson反序列化异常,JSONException: expect ‘:‘ at 0, actual =
- 织梦站内选择和文件管理器中文乱码的解决方法(utf8编码程序包才会)
- 检查值是否是JavaScript中的对象
- 获得插入行身份的最佳方法?
- PHP守护进程常用方法
- iOS Swift UISearchController的取消按钮