首页 > 其他分享 >gin的绑定必填

gin的绑定必填

时间:2024-09-09 19:38:28浏览次数:13  
标签:Web err 必填 绑定 func Gin Go gin

Gin: Go语言中的网络开发利器 - 轻量快速,一杯就够

原创 瀛洲在线编程之道 黑客编程之道    2024年09月06日 07:29 吉林 听全文

今天我们来聊聊Go语言世界中的一颗明珠 —— Gin框架。无论你是刚入门的新手,还是经验丰富的老兵,Gin都能让你的Web开发之旅变得更加轻松愉快。

Gin的诞生背景

在Go语言日益流行的背景下,开发者们渴望一个既能充分利用Go语言特性,又简单易用的Web框架。Gin应运而生,它由Manu Martinez-Almeida于2014年创建,旨在提供一个轻量级、高性能且易于使用的Web框架。

Gin的核心理念和特点

  1. 高性能:追求极致的速度和效率。

  2. 简洁性:API设计简单直观,易于学习和使用。

  3. 轻量级:核心功能精简,按需扩展。

  4. 灵活性:提供丰富的中间件和易于定制的路由。

     

Gin的主要特性

  1. 快速路由:采用基数树(Radix Tree)算法,路由查找极快。

  2. 中间件支持:灵活的中间件机制,易于扩展。

  3. JSON验证:内置的请求数据验证功能。

  4. 错误管理:集成了便捷的错误处理机制。

  5. 渲染支持:支持JSON、XML、HTML等多种渲染方式。

     

Gin vs 其他框架

相比其他Go Web框架,Gin有以下几个显著特点:

  1. 性能卓越:在多项基准测试中,Gin的性能常年位居前列。

  2. 学习曲线平缓:相比Echo等框架,Gin的API设计更加直观。

  3. 社区活跃:大量的第三方库和丰富的社区资源。

  4. 轻量级:相比Beego等全栈框架,Gin更加轻量,适合构建微服务。

  5. 灵活性:中间件机制允许开发者自由扩展功能。

     

5个具体使用示例

让我们通过5个不同方面的示例,来一窥Gin的强大功能:

  1. 基本的HTTP服务器

package main
import "github.com/gin-gonic/gin"
func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // 监听并在 0.0.0.0:8080 上启动服务}

2. 路由参数和查询字符串

package main
import "github.com/gin-gonic/gin"
func main() { r := gin.Default() // 路由参数 r.GET("/user/:name", func(c *gin.Context) { name := c.Param("name") c.String(200, "Hello %s", name) }) // 查询字符串 r.GET("/welcome", func(c *gin.Context) { firstname := c.DefaultQuery("firstname", "Guest") lastname := c.Query("lastname") c.String(200, "Hello %s %s", firstname, lastname) }) r.Run(":8080")}

3. 中间件的使用

package main
import ( "log" "time"
"github.com/gin-gonic/gin")
func Logger() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now()
// 设置变量example c.Set("example", "12345")
// 请求前 c.Next()
// 请求后 latency := time.Since(t) log.Print(latency)
// 获取发送的 status status := c.Writer.Status() log.Println(status) }}
func main() { r := gin.New() r.Use(Logger())
r.GET("/test", func(c *gin.Context) { example := c.MustGet("example").(string)
// 打印:"12345" log.Println(example) })
r.Run(":8080")}

4. 数据绑定和验证

package main
import "github.com/gin-gonic/gin"
type Login struct { User string `form:"user" json:"user" binding:"required"` Password string `form:"password" json:"password" binding:"required"`}
func main() { router := gin.Default()
router.POST("/login", func(c *gin.Context) { var json Login if err := c.ShouldBindJSON(&json); err != nil { c.JSON(400, gin.H{"error": err.Error()}) return } if json.User != "manu" || json.Password != "123" { c.JSON(401, gin.H{"status": "unauthorized"}) return } c.JSON(200, gin.H{"status": "you are logged in"}) })
router.Run(":8080")}

5. 文件上传

package main
import ( "fmt" "net/http" "path/filepath"
"github.com/gin-gonic/gin")
func main() { router := gin.Default() // 为 multipart forms 设置较低的内存限制 (默认是 32 MiB) router.MaxMultipartMemory = 8 << 20 // 8 MiB router.POST("/upload", func(c *gin.Context) { // 单文件 file, _ := c.FormFile("file") filename := filepath.Base(file.Filename) if err := c.SaveUploadedFile(file, filename); err != nil { c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error())) return } c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", filename)) }) router.Run(":8080")}

通过这些示例,我们可以看到Gin在不同场景下的应用。从基本的路由处理,到中间件、数据绑定和文件上传,Gin都提供了简洁而强大的API。

Gin作为一个轻量级的Web框架,以其卓越的性能和简洁的API设计赢得了众多Go开发者的青睐。它既适合构建小型应用,也能胜任大型项目的开发。Gin的学习曲线平缓,即使是Go语言新手也能快速上手。

无论你是在构建RESTful API,还是开发全栈Web应用,Gin都是一个值得考虑的选择。它就像一杯清爽的金酒,提神醒脑,让你的Web开发之旅变得更加愉快。

希望这篇文章能够激发你对Gin的兴趣。如果你有任何问题或想法,欢迎在评论区留言讨论。让我们一起在Go的世界里畅饮Gin,开启Web开发的新篇章!

精彩回顾:

Warp:Rust Web开发的急速列车 - 高性能与优雅并存的新一代框架

一次性的秘密武器,Go语言中sync.Once的魔力

Go语言黑科技,空结构体的神奇应用大揭秘!

Hyper:Rust网络开发的速度与激情 - 构建高性能Web服务的终极利器

R7-4800H迷你主机,性能强劲,颜值高,值得入手!

不积跬步,无以至千里;不积小流,无以成江海。

 

点击下方链接,关注黑客编程之道,一起学习进步!

 

黑客编程之道 分享黑客编程技术,Go、Python、Rust、Java等编程技术 51篇原创内容 公众号

 

瀛洲在线编程之道

赞赏二维码喜欢作者

go15 go语言14 gin1 web框架3 go · 目录 上一篇一次性的秘密武器,Go语言中sync.Once的魔力 个人观点,仅供参考 阅读 569   ​

标签:Web,err,必填,绑定,func,Gin,Go,gin
From: https://www.cnblogs.com/cheyunhua/p/18405151

相关文章

  • Hugging Face 的应用
    大纲Hugging-Face介绍Hugging-Face大语言模型LLM管理Transformers机器学习框架文本生成推理(TGI)HuggingFaceHugging-Face--大语言模型界的GithubHuggingFace专门开发用于构建机器学习应用的工具。该公司的代表产品是其为自然语言处理应用构建的transformer......
  • nginx安装Lua
    nginx安装lua支持步骤1、下载相关安装包(luajit、ngx_devel_kit、lua-nginx-module)wgethttps://github.com/LuaJIT/LuaJIT/archive/v2.0.4.tar.gzwgethttps://github.com/openresty/luajit2/archive/refs/tags/v2.1-20240626.tar.gzwgethttps://github.com/simpl/ngx_devel_......
  • ROS2 - Moveit2 - 创建Moveit插件(MoveIt Plugins)
    创建MoveIt插件本节详细说明了如何在ROS中添加插件。两个必需元素是基类和插件类。插件类继承自基类并覆盖其虚拟函数。用于此目的的主要库是pluginlib。本教程包含三种不同类型的插件,即运动规划器、控制器管理器和约束采样器。运动规划器插件在本节中,我们将展示如何将新......
  • vue打印模版模块,使用vue-plugin-hiprint插件搭建过程
    文章目录概要安装插件引入全局样式引入字体图标库完整demo解析-保存模版解析-左侧的自定义组件解析-视图容器解析-打印文件地址概要项目中,我们可能需要实现打印的需求功能,而打印时,用户可以先去编辑打印模版,这样再其他模版,只需要提供数据,就可以使用模......
  • IBM AI Developer 专业证书专项课程-Introduction to Software Engineering-Unit2-前
    前端网站开发前端开发简介用户交互:用户在浏览在线购物网站时,主要与网站的前端进行交互。这包括浏览不同的页面、选择不同的产品类别、比较产品等活动。前端的作用:前端是用户直接接触的部分,它决定了用户如何与网站或应用进行交互,以及他们的视觉体验。网站开发基础HTML(Hyp......
  • nginx查询日志
    #!/bin/bash日志格式:$remote_addr-$remote_user[$time_local]"$request"$status$body_bytes_sent"$http_referer""$http_user_agent""$http_x_forwarded_for"LOG_FILE=$1echo"统计访问最多的10个IP"awk'{a[$1]+......
  • nginx相关
    Nginx工具Web网络服务我们平时访问的网站服务就是Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务。web网络服务是被动的网络服务,通过网络传输资源,流程如下:用户发起网络请求-->网络服务器接受到请求-->网络服务器取资源-->将资源通过http(超文本......
  • 以MySQL为例,来看看maven-shade-plugin如何解决多版本驱动共存的问题?
    开心一刻清明节那天,看到一小孩在路边烧纸时不时地偷偷往火堆里扔几张考试卷子边烧边念叨:爷爷呀,你岁数大了,在那边多做做题吧,对脑子好,要是有不懂的地方,就把我老师带走,让他教您!前提说明假设MySQL5.7.36的库qsl_datax有表qsl_datax_source和数据CREATETABLE`qsl_datax_source`......
  • 【GeoEvent】实现点要素服务几何信息联合StreamServer流服务数据信息绑定
    数据情况通过sid字段挂接,35个一组数据流结构CSV​​IOT点位数据​​点位数据提前发布为FeatureServer要素服务注意关联字段类型与GeoEvent定义一致​​​​创建GeoEvent定义(数据结构)根据数据流结构决定,注意关联字段与GeoEvent定义一致​​创建TCP接收器​​......
  • 腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......