当前位置: 首页 > news >正文

【Go】--gin框架基本使用

【Go】-- Gin框架基本使用

第一个Gin应用

代码示例

package mainimport "github.com/gin-gonic/gin"// 首页处理函数
func index(c *gin.Context) {c.JSON(200, gin.H{"message": "Hello, world!",})
}func main() {// 忽略gin的日志(生产模式)gin.SetMode(gin.ReleaseMode)// 初始化Gin引擎r := gin.Default()// 定义路由r.GET("/login", index)// 启动服务器,监听1234端口r.Run("0.0.0.0:1234")
}

核心概念

  1. gin.H:Gin框架提供的map[string]interface{}别名,用于构建JSON响应
  2. gin.Context:请求上下文,包含请求和响应信息
  3. 路由定义:使用GETPOST等方法定义HTTP路由
  4. 服务器启动Run()方法启动HTTP服务器

路由定义和处理

GET请求处理

engine.GET("/get_test", func(c *gin.Context){c.JSON(200, gin.H{"code": 200,"msg": "GET 请求成功",})
})

POST请求处理(JSON数据绑定)

engine.POST("/post_test", func(c *gin.Context){var user user.User// JSON数据绑定到结构体if err := c.ShouldBindJSON(&user); err != nil {c.JSON(400, gin.H{"code": 400,"msg": "POST 请求参数错误","error": err.Error(),})return }c.JSON(200, gin.H{"code": 200,"msg": "POST 请求成功","data": gin.H{"username": user.Username,"password": user.Password,},})
})

数据结构定义

package usertype User struct {Username string `json:"username"`Password string `json:"password"`
}

关键特性

  1. 数据绑定ShouldBindJSON()自动将JSON数据绑定到结构体
  2. 错误处理:验证失败时返回详细的错误信息
  3. 响应格式:统一的JSON响应格式(code, msg, data)

模板渲染和静态文件

模板配置

// 加载HTML模板
engine.LoadHTMLGlob("templates/*")
// 或者精确加载指定文件
// engine.LoadHTMLFiles("templates/index.html")

静态文件服务

// 静态文件服务配置
engine.Static("/static", "./static")// 提供单个静态文件
// engine.StaticFile("/favicon.ico", "./static/favicon.ico")

模板渲染

engine.GET("/index", func(c *gin.Context) {c.HTML(200, "index.html", gin.H{"title": "QX-hao的第一个 Gin 项目",})
})

路径映射关系

HTML引用路径实际文件路径
/static/css/style.css./static/css/style.css
/static/js/main.js./static/js/main.js
/static/images/logo.png./static/images/logo.png

模板语法示例

<!-- 使用模板变量 -->
<title>{{.title}}</title><!-- 引用静态资源 -->
<link rel="stylesheet" href="/static/css/style.css">
<script src="/static/js/main.js"></script>
<img src="/static/images/logo.png" alt="Logo">

错误处理和日志记录

全局错误处理中间件

router.Use(func(c *gin.Context) {// 执行后续中间件和路由处理c.Next()// 检查是否有错误发生if len(c.Errors) > 0 {// 自定义错误处理c.JSON(http.StatusInternalServerError, gin.H{"error": "服务器内部错误"})}
})

错误模拟和记录

router.GET("/ping", func(c *gin.Context) {// 模拟处理过程中发生错误c.Error(gin.Error{Err: errors.New("处理过程中发生错误")})
})

错误处理流程

  1. 请求到达:浏览器发送请求
  2. 执行中间件:先执行自定义错误处理中间件
  3. 路由处理:执行具体的路由处理函数
  4. 错误检查:检查c.Errors中是否有错误
  5. 错误响应:如果有错误,返回统一的错误格式

日志配置

// 生产模式(减少日志输出)
gin.SetMode(gin.ReleaseMode)// 开发模式(详细日志)
// gin.SetMode(gin.DebugMode) // 默认模式

核心API总结

路由方法

方法说明示例
GET处理GET请求r.GET("/path", handler)
POST处理POST请求r.POST("/path", handler)
PUT处理PUT请求r.PUT("/path", handler)
DELETE处理DELETE请求r.DELETE("/path", handler)

响应方法

方法说明示例
c.JSON()返回JSON响应c.JSON(200, gin.H{"msg": "ok"})
c.HTML()返回HTML页面c.HTML(200, "index.html", data)
c.String()返回文本响应c.String(200, "Hello")
c.Redirect()重定向c.Redirect(302, "/new-path")

数据绑定

方法说明示例
ShouldBindJSON()JSON数据绑定c.ShouldBindJSON(&user)
ShouldBindQuery()Query参数绑定c.ShouldBindQuery(&params)
ShouldBindUri()URI参数绑定c.ShouldBindUri(&params)
http://www.dtcms.com/a/498824.html

相关文章:

  • [优选算法专题四.前缀和——NO.25一维前缀和]
  • openharmony之分布式相机开发:预览\拍照\编辑\同步\删除\分享教程
  • LeetCode 402 - 移掉 K 位数字
  • 皮卡丘XSS
  • 思维|栈
  • 关于网站建设方案的案例数码产品销售网站建设策划书
  • 2025年10月17日
  • Entity Framework Core和SqlSugar的区别,详细介绍
  • 【C语言】运算符
  • 网站备案帐号是什么菏泽微信小程序制作
  • 消息队列以及RabbitMQ的使用
  • PyCharm之服务器篇|Linux连接校园网Neu版
  • 在linux上训练深度学习环境配置(Ubuntu)
  • 洗车小程序系统
  • 网站 备案 营业执照太仓网站设计早晨设计
  • 煤矿网站建设WordPress高端主题 熊
  • 告别炼丹玄学:用元学习精准预测模型性能与数据需求,AWS AI Lab研究解读
  • 无需 VNC / 公网 IP!用 Docker-Webtop+cpolar,在手机浏览器远程操控 Linux
  • Vue3与Cesium:轻量版3D地理可视化实践
  • 数据预处理(音频/图像/视频/文字)及多模态统一大模型输入方案
  • 一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
  • Linux-网络安全私房菜(二)
  • 广州外贸网站建设 open需要做网站建设的公司
  • QML学习笔记(四十三)QML与C++交互:上下文属性暴露
  • Redis 的字符串底层实现
  • 递归-206.反转链表-力扣(LeetCode)
  • 【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
  • 百度怎么注册公司网站wordpress 2019主题谷歌字体
  • 算法14.0
  • 基于掌纹生物特征的 Windows 安全登录实践:从物理安全到零信任身份验证