3.Golang面试题—Gin框架、GORM

Gin和Gorm常见面试题及解答_gorm面试题 视频、图片、音频,这三种既可以实现在浏览器端直接播放(预览),也可以改为直接下载。描述:使用Gorm里如果只想查一条数据,比如通过用户ID去查询用户表,一般只会查到一条,如果没查到会怎么样?Gin中的中间件实际上还是一个Gin中的 gin.HandlerFunc。可以使用Gin路由的中间件功能,把要记录的接口封装到一个接口组中,然后注册中间件【方法】来处理。Gin里,因为一个请求过来后,是可以再开一个协程来处理请求的,这个需要在Gin里才能启用协程。路由组中间件:路由组中间件仅对该路由组下面的路由起作用。 阅读详情
AI摘要

本文介绍了Gin框架的特性,如性能优异的路由机制,并与其他框架如Echo、Beego进行了比较。还探讨了Gin的开发步骤,包括配置管理、路由设置和中间件的使用。此外,提到了JWT的实现、参数校验、跨域处理以及GORM作为ORM框架的角色。文章还讨论了YAML配置的优势和viper库的用途。

九、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框架如何实现跨域?

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()
   }
}()

golang后端面试题总结 golang后端面试题总结你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z 重做:Ctrl/Command + Y 加粗:Ctrl/Command + B 斜体:Ctrl/Command + I 标题:Ctr 阅读详情

相关推荐

Go全栈_Golang、Gin实战、Gorm实战、Go_Socket、Redis、Elasticsearch、微服务、K8s、RabbitMQ全家桶

Go全栈_Golang、Gin实战、Gorm实战、Go_Socket、Redis、Elasticsearch、微服务、K8s、RabbitMQ全家桶

yuanlaile的博客 662

gin框架中到处都是gin.H,表示什么意思?

gin框架中到处都是gin.H,表示什么意思?

pillar04的专栏 2640

GO Gin Web框架面试题及参考答案

Gin 作为一款轻量级 Web 框架,在 Go 语言生态中占据重要地位,与原生的 net/http 包相比,二者在设计理念、性能表现及开发体验上存在显著差异。理解这些差异有助于开发者在不同场景下做出合适的技术选择。核心区别首先体现在性能层面。Gin 基于 Radix Tree(基数树)实现路由匹配,这种数据结构在路径查找时具有极高的效率,尤其适合处理大量动态路由。相比之下,net/http 使用线性查找来匹配路由,在路由数量较多时性能会显著下降。Benchmark 数据显示,在高并发场景下,Gin 的路由匹

大模型大数据攻城狮的专栏 1011

go语言Gin框架常见面试题(1)

go语言中redis的Pipelined方法

abc54250的博客 3533

《100天Go语言从入门到精通系列》-专栏介绍和目录

本专栏专注于Go语言基础到进阶,从项目实战到源码分析的系统讲解,逐步深入实际应用场景到Go语言的高级特性,轻松学会用Go语言解决各种实际问题。不管是零基础还是有经验的开发,相信都能从本专栏获益。持续更新中...

数据知道的博客 7013

Win10 / Win11 启用 Hyper-V 虚拟机详细教程(图文+命令行全攻略)

摘要:本文详细介绍Windows10/11系统启用Hyper-V虚拟化平台的方法,包含专业版/企业版的图形界面和PowerShell命令行操作,以及家庭版通过脚本强制启用的特殊方案。内容涵盖版本支持对比、操作步骤图解、常见问题解答和性能优化建议,帮助开发者快速搭建虚拟化环境进行多系统测试。附微软官方文档参考链接和详细操作示意图。

ElioXu 7061

gin.H的简单理解

gin.H实际上就是map[string]interface{}, 而interface{} 可以代表任意类型, interface{} 就是一个空接口,所有类型都实现了这个接口,所以它可以代表所有类型, 所以我们可以以map的形式插入任意类型数据, 这是对于interface比较粗浅的理解。 ...

lihanhan98的博客 2788

PHP证书图片生成

$realname = "姓名"; $schoolname = "学校"; $idcard = "身份证号"; $image = imagecreatefrompng('certification.png'); // 证书模版图片文件的路径 $red = imagecolorallocate($image,00,00,00); // 字体颜色

4036

Gin和Gorm常见面试题及解答_gorm面试题,看了这篇文章我才真正理解了

/ 设置拿到除基本字段外的其他字段,如上面的Apitoken, 这里通过引用Access-Control-Expose-Headers,进行配置,效果是一样的。c.File(“F:\project\files\吴景军 - 午后 (纯音乐) [mqms2].mp3”)//注意:在测试下载功能时,浏览器需要清缓存,否则会异常!

2401_84281720的博客 1239

数字后端设计实现 | 数字后端PR工具Innovus中如何创建不同高度的row?

数字IC后端设计实现之innovus中如何创建不同高度的row?

weixin_37584728的博客 3163

Redhawk-SC输入件配置中的5个常见错误及解决方法

本文针对Redhawk-SC功耗与可靠性签核工具,深入剖析了输入件配置中工艺文件错配、DEF文件路径、时序文件格式、电源网络模型及宏模型处理这5个最常见且棘手的错误。文章提供了资深工程师验证过的实战解决方案与检查清单,旨在帮助用户规避风险,提升配置效率与分析准确性,确保芯片签核流程的顺利进行。

earth的博客 233

Gin和Gorm常见面试题及解答

Gin和Gorm常见面试题及解答

Mr_XiMu的博客 2609

Colmap中 patchmatch源码

惊世骇俗的Colmap PatchMatch源码 500多行,简明易懂 先了解PatchMatch的options: max_image_size: 任一维度的最大图像尺寸 gpu_index: gpu的下标 depth_min,depth_max: 随机采样的深度范围 window_radius:用于计算NCC(两图片的归一化互相关),NCC的计算需要用到 win_size. 图像匹配 | NCC 归一化互相关损失 | 代码 + 讲解 - 知乎 (zhihu.com) window_step: 用.

qq_24884193的博客 2210

Go框架面试突击!30道高频题解析

有粉丝朋友问我能不能整理Go主流框架方面的面试题,安排!这篇文章分享了gRPC、GoFrame、GoZero、GoMicro、GORM、Gin等主流框架的30道面试题和详解。需要大厂面经的朋友们也可以直接加我好友,私信我。GoFrame 是一个强大的 Go Web 应用开发框架,它提供了一系列优秀的功能模块和常用工具,方便开发者快速构建高性能、高可用的 Web 应用程序。相较于 Go 标准库,GoFrame 提供了更多的功能模块,例如:ORM、Cache、Session、WebSocket、邮件发送等等。

王中阳讲编程 2496

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8367

一个非常简单的变分量子分类器 (VQC)

​ 在之前的帖子(这里和这里)中,我已经开始谈论 QML,为什么以及如何学习,从现在开始,我将开始分享我的研究和发现,到目前为止,这些都是非常基本的。​

gongdiwudu的专栏 6208

最新最全Go主流框架高频面试题大全

这篇文章整理了gRPC、GoFrame、GoZero、GoMicro、GORM、Gin等主流框架的高频面试题。想进群和我们一起学习的朋友可以关注我,邀你进群。GoFrame 是一个强大的 Go Web 应用开发框架,它提供了一系列优秀的功能模块和常用工具,方便开发者快速构建高性能、高可用的 Web 应用程序。相较于 Go 标准库,GoFrame 提供了更多的功能模块,例如:ORM、Cache、Session、WebSocket、邮件发送等等。此外,GoFrame 也提供了更友好的 API 和更好的性能。

王中阳讲编程 1530

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

「金三银四」这些面试题,看看你会答几道?

昨天群友问我能不能整理Go主流框架方面的面试题,安排!这篇文章整理了gRPC、GoFrame、GoZero、GoMicro、GORM、Gin等主流框架的30道面试题。需要大厂面经的朋友们也可以在优快云私信我。GoFrame 是一个强大的 Go Web 应用开发框架,它提供了一系列优秀的功能模块和常用工具,方便开发者快速构建高性能、高可用的 Web 应用程序。相较于 Go 标准库,GoFrame 提供了更多的功能模块,例如:ORM、Cache、Session、WebSocket、邮件发送等等。

王中阳讲编程 2150

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

go语言后端面试题

Golang后端面试题 1、以下两种写法有什么区别 func (param CreateOrderParam) Create() { func (param *CreateOrderParam) Create() { 给方法绑定了一个指针类型的结构体 指针那个可以直接修改结构体的数据,而非指针的那个不行 2.定义一个包内全局字符串变量,下面语法正确的是(A) A. var str string B. str:= “” C.str="" D. varstr= “” 3、协程和线程有什么区别 线程:cpu切换多

华龙在飞翔 1987

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【Go语言实战】(3) Gin + Gorm 简单备忘录 含接口文档_go gin gorm文档(1)

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

2401_84281748的博客 749

2024年最新Gin和Gorm常见面试题及解答_gorm面试题,2024年最新入职阿里啦

r.MaxMultipartMemory = 1024

2401_84925335的博客 702
上一篇: 5.Java面试题—【MySQL】、【Redis】、【计算机网络】、Linux、【Nginx】
下一篇: 2.Golang面试题—面向对象、语言类库、并发编程、IO、通信/网络、内存分配/垃圾回收
BinarySage
博客等级 码龄9年 87粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

BinarySage

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

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

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

打赏作者

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

抵扣说明:

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

余额充值