3.Golang面试题—Gin框架、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语言 中的 中间件 有什么作用?

  • 中间件 middlewaresGin框架 起到了 功能层 的作用。
  • 当用户提交了 数据请求 时,功能层 负责将这些请求进行 预处理,再向数据库发出 数据交互

中间件 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: 基于 mongodbmysql会话中间件

什么是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框架如何实现跨域?

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) 是 除了 jsonxml 之外的另一种 数据传输方式
  • 一条 数据,用 protobuf 序列化后的大小是 json10分之一, 性能却是它的 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()
   }
}()

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

页川叶川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值