任丘网站制作,各种中药材初加工平台,深圳网站建设制作公司,域名买了之后如何建设网站云原生学习路线导航页#xff08;持续更新中#xff09; 本文是golang语言学习系列#xff0c;本篇对Gin框架的基本使用方法进行学习 1.Gin框架是什么
Gin 是一个 Go (Golang) 编写的轻量级 http web 框架#xff0c;运行速度非常快#xff0c;如果你是性能和高效的追求者…云原生学习路线导航页持续更新中 本文是golang语言学习系列本篇对Gin框架的基本使用方法进行学习 1.Gin框架是什么
Gin 是一个 Go (Golang) 编写的轻量级 http web 框架运行速度非常快如果你是性能和高效的追求者Gin 最擅长的就是 Api 接口的高并发如果项目的规模不大业务相对简单这个时候我们也推荐您使用 GinGin 的官网https://gin-gonic.com/zh-cn/Gin 官方文档地址https://gin-gonic.com/zh-cn/docs/ 有中文文档可以直接看文档学习 Github 地址https://github.com/gin-gonic/gin
2.Gin框架快速入门
2.1.快速入门
有一篇博客写的非常详细直接看这个入门就行 Golang gin框架 按照上面博客学习过程中可能遇到的疑问写在 2.2 中
2.2.学习上面博客可能遇到的问题
2.2.1.Json和JsonP的区别
JSONJavaScript Object Notation和JSONPJSON with Padding是两种用于在网络上传输数据的格式二者区别如下。JSONJavaScript Object Notation JSON 是一种数据格式用于在不同的系统之间传输数据。JSON 是纯文本易于阅读和编写也易于解析和生成。JSON 数据可以表示为对象、数组、字符串、数字、布尔值和 null。JSON 数据格式不支持跨域请求。 JSONPJSON with Padding JSONP 是 JSON 的一种“使用模式”用于解决跨域请求的问题。JSONP 实际上是在 JSON 数据周围包裹了一个函数调用这个函数名由客户端指定。 JSONP的请求客户端需要在url后使用 ? 指定一个 callback 查询参数因此在上面的博客中jsonp请求的响应会被客户端传入的callback包裹起来形成callback调用 JSONP 的工作原理是通过动态创建 script 标签将请求发送到另一个域上的 JSONP 服务端点并且该服务端点返回的数据已经包含在了指定的函数调用中。JSONP 允许在不同域之间进行数据交换绕过了浏览器的同源策略限制。 总结 JSON 是一种数据格式而 JSONP 则是使用 JSON 数据进行跨域请求的一种技术JSONP 通常用于处理由浏览器的同源策略引起的限制允许在不同域之间进行数据交换
2.2.2.HTML模板渲染讲的不清楚
html渲染上面博客说的不清楚建议看官方文档 https://gin-gonic.com/zh-cn/docs/examples/html-rendering/
2.2.3.请求参数绑定结构体重点 标记的使用 url后使用?传递的查询参数、请求体为user123password456这种格式的body需要结构体设置 form 才可以使用 gin 的自动绑定type Userinfo struct {Username string form:userPassword string form:password
}不过现在的post请求请求体为 “application/json”结构体设置json标记可选// 设置json需要按照json标记来可以绑定 {user: 123, pwd: 456}
type Userinfo struct {Username string json:userPassword string json:pwd
}// 没有设置json则请求体需要和属性名一致可以绑定 {username: 123, password: 456}
type Userinfo struct {Username string form:userPassword string form:pwd
}路径参数需要使用uri参数// 接口可以是 */:user/:pwd
type Userinfo struct {Username string uri:userPassword string uri:pwd
}Header 头信息绑定需要使用header参数 gin.Context 的绑定方法使用 我们用的最多的绑定方法是 c.ShouldBind()可以根据req的Context-Type自动推断要绑定的类型不过 gin.Context 为 很多类型编写了绑定方法如果你明确知道前端穿过来的数据是什么格式可以直接使用这些方法 可以看到gin.Context有两个系列方法Bindxxx和ShouldBindxxx方法二者区别如下 Bind 系列方法 Bind系列方法在绑定失败时会直接将错误信息发送给客户端并终止请求处理。这意味着如果绑定失败客户端将收到一个包含错误信息的响应并且请求处理将不会继续进行。 ShouldBind 系列方法 ShouldBind系列方法在绑定失败时不会立即将错误信息发送给客户端而是将错误信息存储在上下文中。这使得开发者可以根据实际情况自定义错误处理逻辑例如返回特定的错误响应、记录错误日志等。开发者可以通过检查上下文中的错误信息来判断绑定是否成功并根据需要采取进一步的行动。 更详细的用法可以学习 Gin 框架学习笔记02— 参数自动绑定到结构体Go学习第十五章——Gin参数绑定bind与验证器
2.2.4.gin.Context.Abort()方法
gin路由注册时参数可以填多个中间件一个处理函数 其中参数位置gin的中间件必须放在 处理函数 前面gin的中间件使用 c.Next 控制是请求到达时执行还是请求返回时执行 c.Abort 执行后 当前中间件的后续语句还会执行但是 c.Next 失效了后面的中间件和最后的处理函数都不会再执行执行完当前中间件请求就返回了如下面代码程序会输出 1111111111 和 handle time但是不会输出 2222222222 func CalTimeMiddleWare(c *gin.Context) {start : time.Now()c.Abort()log.Info(1111111111)c.Next()log.Infof(handle time is [%d], time.Since(start).Nanoseconds())
}func MiddleWare2(c *gin.Context) {log.Info(2222222222)
}adminRouter.GET(/users, middleware.CalTimeMiddleWare, middleware.MiddleWare2, controller.NewAdminController().List)2.2.5.使用gin进行文件上传
上面的博客里没有写gin上传文件的内容可以直接看 官方文档的内容写的很详细上传单文件 https://gin-gonic.com/zh-cn/docs/examples/upload-file/single-file/ 上传多文件 https://gin-gonic.com/zh-cn/docs/examples/upload-file/multiple-file/
2.2.6.gin获取cookie
gin.Context.Cookie(“key1”)方法获取cookie中键为key1的值比如下面c.Cookie(“key1”) 得到的值就是 value1curl --location http://localhost:8080/admin/users \
--header Cookie: key1value1; key2value2go代码写法v, err : c.Cookie(key1)
if err ! nil {log.Warnf(dont find cookie in [%s], c.Request.URL.Path)
}
c.Set(key1, v)