Gin框架入门(1)

一、Gin框架简介

Gin是什么?

Gin是一款用Go语言编写的Web框架,它是一个HTTP web框架,涵盖了路由、中间件、渲染等方面的功能,让开发者可以快速构建。

Gin的设计理念和优势

Gin的设计理念是"简单易用"。它具有API友好、快速高效、模块化设计等优势。
API友好:Gin的API设计简单易懂,对开发者友好。
快速高效:作为Go语言编写的框架,Gin拥有高性能的天生优势。内测显示,Gin的路由速度可以达到40000+次/秒。
模块化设计:中间件实现了模块化设计,可以灵活添加各种中间件,如日志、GZIP压缩等。高性能的Web应用程序。

二、快速上手Gin

安装与导入Gin

使用go get命令安装GIn:

go get  github.com/gin-gonic/gin

编写HelloWorld示例

package main

import "github.com/gin-gonic/gin"

func hello(c *gin.Comtext){
	c.String(200,"Hello World!")
}
func main() {
    r := gin.Default()
    r.GET("/", hello)
    r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}

这个简单的示例使用Gin框架,在"/"路径上响应"Hello World!"字符串。你可以在浏览器中访问 http://localhost:8080 来查看效果。通过这个基本实例,你可以了解到使用Gin搭建Web服务器的基本流程。

三 、Gin路由

1、路由定义

Gin提供了多种路由定义方式,可以定义参数路由、查询字符串路由、通配符路由等。在Gin中,使用HTTP方法函数定义路由,支持r.GET()、r.POST()、r.PUT()、r.DELETE()、r.PATCH()等多种HTTP方法。路由路径支持参数通配符定义,语法与标准库http包一致。

r.GET("/path", handleFunc) // 不带参数路由
r.GET("/path/*name", func(c *gin.Context){...}) // 参数路由
r.GET("/path", func(c *gin.Context){...}) // 查询字符串 ?key=value
r.GET("/assets/*filepath", func(c *gin.Context){...}) // 通配符路由

2、路由组

可以使用路由组来更好地组织路由。为了更好地控制路由层次结构,Gin支持将路由分组,每个组路由可以拥有父级、子级的关系。通过路由组,我们可以更好地管理项目的路由设计。

v1 := r.Group("/v1")
{
    v1.GET("/users", GetUsers)
    v1.GET("/users/:id", GetUser)
}

路由参数获取
通过Context上下文可以获取路由参数、查询字符串参数等。
在路由中定义了路径参数后,我们可以在处理函数中使用c.Param()来获取参数值。

r.GET("/user/:id", func(c *gin.Context) {
	id := c.Param("id") 
	// 使用id ...
})
id := c.Param("id")            // 获取路由参数
name := c.Query("name")       // 获取查询字符串参数
c.DefaultQuery("name", "lia") // 设置默认值

四、Gin中间件

中间件概念

中间件是在请求到达路由之前和处理完之后需要执行的函数,中间件提供了一种机制来过滤或链式处理HTTP请求和响应。常用于日志、身份验证、请求限流等功能。
日志记录 :记录请求信息和响应信息等。
错误处理:捕获panic或错误,并给出统一的响应。
安全认证:进行认证授权。
请求过滤:检查IP黑名单等。
数据转换:对请求体或响应数据进行转换。
常用的中间件
Gin内置了Logger和Recovery两个常用中间件。

Logger中间件用于记录请求信息,终端输出请求详情。
Recovery中间件用于恢复代码中出现的panic,防止服务器异常退出。
自定义中间件
Gin也支持用户自定义中间件,只需给定义一个处理函数即可。
通过gin.Default()gin.New()创建一个Gin引擎实例。

r := gin.Default() // 带有一些默认中间件
r := gin.New() // 不带任何中间件

使用gin.Use()注册全局中间件。

func TestMW(c *gin.Context) {
	c.String(200, "hello,%s", "world")
}
func Middware1(c *gin.Context) {
	fmt.Println("我的第一个中间件")
}
func main() {

engine := gin.Default()
	engine.GET("testmw", TestMW)
	engine.Use(Middware1)
	engine.Run()

}

五、应渲染与静态文件处理

在Gin中发送响应数据同样非常简单,支持各种格式的响应渲染。

JSON渲染

c.JSON(200, gin.H{"status": "ok"}) // 响应JSON

HTML渲染

// index.html位于templates目录
r.LoadHTMLFiles("templates/index.html")

c.HTML(http.StatusOK, "index.html", gin.H{
	"title": "Main website",
})
c.String(200, "Hello World!")    // 响应字符串
c.Redirect(301, "/new_path")    // 重定向

静态文件处理

Gin可以很方便地处理和托管静态文件,如CSS、JS、图片等。通过gin.Static()这个函数指定静态文件目录:

r.Static("/assets", "./assets")

这样所有请求路径中包含/assets/的请求都将从本地./assets目录进行响应。也可以使用gin.StaticFS()指定虚拟已挂载的文件系统。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值