本文目录如下:
- 九、Gin框架
- 简单介绍一下 Gin 框架 (为什么选择Gin框架)?
- 你还知道那些框架 (Echo、Beego)?有什么特点?
- Gin框架的开发步骤?
- 介绍下你实现的项目?
- YAML 配置的优势在哪里 ?
- 什么是 viper?
- Gin语言 中的 中间件 有什么作用?
- 中间件 middlewares 怎么使用的,中间件有几种类型?
- Gin框架 常用的库有哪些 (jwt、cors、zap、swagger)?
- 什么是JWT?
- 说说你在 Gin框架 中是如何使用 JWT 的(生成Token)?
- Gin框架中怎么实现 参数校验?
- Gin框架如何实现跨域?
- Gin框架的 route 实现原理?
- Gin框架 响应请求方式有哪几种?
- Gin框架 中 Gin.H 代表什么意思?
- Gin框架 传输文件 使用什么方法?
- 什么是DAO模式?
- 谈谈你对 protocol buffers 的理解?
- 十、GORM
九、Gin框架
简单介绍一下 Gin 框架 (为什么选择Gin框架)?
Gin框架
是基于 Go语言 开发的一个 轻量级Web应用开发框架。- Gin框架 使用 http 实现 路由机制,所以 性能很好。
你还知道那些框架 (Echo、Beego)?有什么特点?
Echo
: 比 gin框架 更轻量, 非常适合于开发 轻量级的微服务。Beego
: 模块很全, 适合开发 工业级项目。
Gin框架的开发步骤?
- 1.加载配置: 通过
github.com/spf13/viper
指定 配置文件,并从 配置文件 中加载 配置信息。- 2.初始化 MySQL 配置、Redis 配置、日志 配置等。
- 3.初始化路由配置,注册路由。
- 4.启动项目: r.Run()。
介绍下你实现的项目?
博客管理系统 以 用户登录、博客发布、社区管理 为主要功能进行延展, 系统中包含:
viper配置管理
、zap日志管理
、validate参数校验
、jwt认证
、GROM连接数据库
、swagger生成文档
等技术。
YAML 配置的优势在哪里 ?
- 1.减少了重复的前缀, 方便阅读
- 2.支持数组
什么是 viper?
viper 是基于 Go语言 实现的 配置解决方案, 具有 丰富的特性。
- 支持 YAML / JSON 等多种格式的配置文件。
- 可以设置 监听配置文件 的 修改操作。
Gin语言 中的 中间件 有什么作用?
- 中间件 middlewares 在 Gin框架 起到了 功能层 的作用。
- 当用户提交了 数据请求 时,功能层 负责将这些请求进行 预处理,再向数据库发出 数据交互。
中间件 middlewares 怎么使用的,中间件有几种类型?
中间件
middlewares
使用use
方法。中间件按 作用范围 可分为三种:
全局
中间件: 例: router.Use(Logger(), Recovery())路由组
中间件: 例: userRouter := router.Group(“/user”, CookieMiddleware())单个路由
中间件: 例: router.GET(“/login”, LoginMiddleware, loginHandler)。
Gin框架 常用的库有哪些 (jwt、cors、zap、swagger)?
go-jwt
: 用于 Gin框架 的 JWT中间件。go-cors
: 用于处理 跨域请求 的 中间件。zap
: 用于 记录日志。validateap
: 用于 参数校验。gin-sessions
: 基于 mongodb 和 mysql 的 会话中间件。
什么是JWT?
JWT
全称 JSON Web Token,它规定了一种Token
实现方式,目前多用于前后端分离项目场景下。
说说你在 Gin框架 中是如何使用 JWT 的(生成Token)?
- 当 用户登录 时,根据 用户信息 生成 token码,并将 token码 传递给 前端。
- 当用户再次发送请求时,请求连接中会包含用户对应的 token码,JWT中间件 会在接收到请求之后自动从 token码 中解析出用户信息,并放入请求的上下文
c
中。
Gin框架中怎么实现 参数校验?
- Gin框架 使用
github.com/go-playground/validator
插件进行 参数校验。- 在 struct 结构体 添加
binding
标签,然后调用ShouldBing
方法。
Gin框架如何实现跨域?
- 1.写一个 中间件 来配置 跨域。
- 2.使用官网提供的 插件: github.com/gin-contrib/cors。
Gin框架的 route 实现原理?
- gin 的每种方法 (POST, GET …) 都有自己的一颗 路由树。
- 当 gin 收到客户端的请求时, 会去 路由树 里根据 URL 找到相关的 处理函数(handler)。
Gin框架 响应请求方式有哪几种?
以
字符串
方式: c.String(http.StatusOK, “hello world”)
以json
格式: c.JSON(http.StatusOK, gin.H{ })
Gin框架 中 Gin.H 代表什么意思?
gin.H
实际上就是map[string]interface{}
。- 引入 gin.H 可以简化生成 json 的方式,gin.H 可以 嵌套使用。
Gin框架 传输文件 使用什么方法?
- 上传文件:
c.SaveUploadedFile
(myFile, “./”+myFile.Filename)- 给前端返回文件:
c.File
(“./” + myFile.Filename)
什么是DAO模式?
DAO(Data Access Object): 在不暴露 数据库实现细节 的前提下提供 数据访问操作。
谈谈你对 protocol buffers 的理解?
Protocol Buffers
(protobuf) 是 除了 json 和 xml 之外的另一种 数据传输方式。- 一条 数据,用 protobuf 序列化后的大小是 json 的 10分之一, 性能却是它的 5~100倍。
缺点
: 由于是 二进制格式 存储的,所以 可读性较差。
十、GORM
什么是 ORM 框架?
对象-关系映射(ORM)系统,实现了 程序对象 到 关系数据库数据 的映射。
事务处理 有哪些主要注意的点?
- 首先启动事务时一定要做 错误判断。
- 建议在 启动事务 之后马上写 defer方法。
- 在 defer方法 内对 err 进行判断,如果 全局 中有 err!=nil 就回滚 (全局中 err 都为 nil 才能 提交事务)
- 在 提交事务 之后我们可以定义一个 钩子函数 afterCommit,来统一处理事务提交后的 逻辑。
tx, err := g.DB().Begin() // 启动事务
if err != nil {
return errors.New("启动事务失败")
}
defer func() {
if err != nil {
tx.Rollback() // 回滚
} else {
tx.Commit() // 事务完成
//定义钩子函数
afterCommmit()
}
}()