首页 > 其他分享 >Golang Gin系列-6:Gin 高级路由及URL参数

Golang Gin系列-6:Gin 高级路由及URL参数

时间:2025-01-21 13:03:30浏览次数:3  
标签:URL 中间件 Golang func gin Gin main 路由

在本章中,我们将深入研究使用Gin框架的高级路由和URL参数。我们将介绍如何创建和使用路由组、应用中间件、提取路径参数、处理查询字符串、处理静态文件以及使用HTML模板。

路由分组

为什么要使用路由组

使用路由组有助于保持代码结构整洁有序。当路由被逻辑分组时,它变得更容易管理和扩展应用程序。例如,您可能有一组与用户管理相关的路由,另一组与产品管理相关的路由。

创建和使用路由分组

路由分组能够组织路由并应用通用中间件。这对于对共享公共路径前缀或需要相同中间件的路由进行分组特别有用。
在这里插入图片描述

示例:创建路由分组

在这个例子中,我们为API路由创建分组:

package main

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

func main() {
    r := gin.Default()

    // Group: /api
    api := r.Group("/api")
    {
        api.GET("/users", getUsers)
        api.GET("/products", getProducts)
    }

    r.Run() // listen and serve on 0.0.0.0:8080
}

func getUsers(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "Fetching all users",
    })
}

func getProducts(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "Fetching all products",
    })
}

在这个例子中,‘ /api/users ’和‘ /api/products ’被分组在‘ /api ’路径下。

在路由分组中应用中间件

中间件功能对于处理诸如身份验证、日志记录等任务至关重要。通过将中间件应用于路由组,可以确保组内的所有路由都由中间件处理。

示例:应用中间件

在这个例子中,我们将身份验证中间件应用到admin路由组:

package main

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

func main() {
    r := gin.Default()

    // Group: /admin
    admin := r.Group("/admin")
    admin.Use(AuthMiddleware())
    {
        admin.GET("/dashboard", adminDashboard)
        admin.GET("/settings", adminSettings)
    }

    r.Run()
}

func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        // Authentication logic
        if c.Request.Header.Get("Authorization") != "Bearer token" {
            c.AbortWithStatus(401)
            return
        }
        c.Next()
    }
}

func adminDashboard(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "Admin Dashboard",
    })
}

func adminSettings(c *gin.Context) {
    c.JSON(200, gin.H{
        "message": "Admin Settings",
    })
}

在这个例子中,‘ AuthMiddleware ’函数检查授权令牌。如果令牌不存在或不正确,请求将以401状态中止。

路径参数和查询字符串

提取路径参数

路径参数允许你在URL中传递数据,使得路由更加动态化。在Gin中的Param方法,你可以使用c 提取这些参数。

示例:提取路径参数

package main

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

func main() {
    r := gin.Default()
    r.GET("/user/:id", getUser)
    r.Run()
}

func getUser(c *gin.Context) {
    userID := c.Param("id")
    c.JSON(200, gin.H{
        "user_id": userID,
    })
}

在这个例子中,当向‘ /user/123 ’发出请求时,‘ userID ’变量将是‘ 123 ’。

使用查询字符串

查询字符串是在URL中传递数据的另一种方式。它们通常用于过滤、排序和分页。您可以使用c 来检索查询字符串参数。查询的方法。

示例:使用查询字符串

package main

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

func main() {
    r := gin.Default()
    r.GET("/search", search)
    r.Run()
}

func search(c *gin.Context) {
    query := c.Query("q")
    c.JSON(200, gin.H{
        "query": query,
    })
}

在本例中,当向’ /search?q=golang’,则 ‘query’ 变量将为 'golang '。

处理静态文件和模板

提供静态文件

使用Gin提供静态文件(如图像、CSS和JavaScript文件)非常简单。用“r.static”方法提供静态文件目录。

示例:提供静态文件

package main

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

func main() {
    r := gin.Default()
    r.Static("/assets", "./assets")
    r.Run()
}

在这个例子中,任何对‘ /assets ’的请求都将从’./assets’的目录中提供文件。例如,对‘ /assets/style.css ’的请求将从‘ ./assets ’目录中获取‘ style.css ’文件。

使用HTML模板与Gin

Gin支持使用‘ HTML ’方法呈现HTML模板。首先,使用‘ LoadHTMLGlob ’或‘ LoadHTMLFiles ’加载模板。

示例:使用HTML模板

package main

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

func main() {
    r := gin.Default()
    r.LoadHTMLGlob("templates/*")
    
    r.GET("/index", func(c *gin.Context) {
        c.HTML(200, "index.tmpl", gin.H{
            "title": "Main website",
        })
    })
    
    r.Run()
}

templates目录中创建index.tmpl文件:

<!DOCTYPE html>
<html>
<head>
    <title>{{ .title }}</title>
</head>
<body>
    <h1>{{ .title }}</h1>
</body>
</html>

在这个例子中,对‘ /index ’的请求将渲染 ‘index.tmpl’ 模板,并提供title变量为“Main webSite”。

最后总结

通过本文中的示例,你应该能够在Gin应用程序中有效地利用高级路由和URL参数。Gin,愈学习愈快乐, Go!

标签:URL,中间件,Golang,func,gin,Gin,main,路由
From: https://blog.csdn.net/neweastsun/article/details/145268141

相关文章

  • css中padding和margin是相对于父元素还是子元素呢?
    在CSS中,padding(内边距)和margin(外边距)的参照物或者说它们是相对于哪个元素,取决于它们是应用在哪个元素上,以及我们是从哪个角度去看待它们的效果。padding(内边距):padding是元素边框与元素内容之间的空间。当你为一个元素设置padding时,这个padding是相对于该元素自身的内容区域......
  • nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
    Nginx是一种高性能的HTTP和反向代理服务器,广泛用于网站的静态文件服务和负载均衡。在实际应用中,我们常常需要修改Nginx的默认根目录以满足特定的业务需求。本文将详细介绍在Linux、CentOS、Ubuntu和openEuler系统中如何修改Nginx的默认根目录,并设置一个软件源repo站......
  • golang 多线程 备份文件夹到兄弟层级 wail group
    golang多线程备份文件夹到兄弟层级wailgroupD:\GolangTools\src\config\config.gopackageconfigtypeConfigHandlerstruct{ includeDirNames[]string includeFileNames[]string excludeDirNames[]string excludeFileNames[]string}funcNewConfigHandler......
  • VP AtCoder Beginner Contest 380
    A-123233模拟即可。点击查看代码voidsolve(){intcnt[10]{};intn;std::cin>>n;while(n){ ++cnt[n%10]; n/=10;}for(inti=1;i<=3;++i){ if(cnt[i]!=i){ std::cout<<"No\n&qu......
  • Golang学习笔记_28——工厂方法模式
    Golang学习笔记_25——协程Golang学习笔记_26——通道Golang学习笔记_27——单例模式文章目录工厂方法模式1.介绍2.优点3.类图4.实现源码工厂方法模式1.介绍工厂方法模式(FactoryMethod)是一种创建型设计模式,它提供了一种创建对象的接口,但由子类决定要实......
  • Go语言【Gin框架】:JSON、AsciiJSON、PureJSON和SecureJSON的区别
    在Go语言中,JSON、AsciiJSON、PureJSON和SecureJSON是Gin框架用于发送JSON响应的方法。1.c.JSON功能:将提供的数据序列化为标准的JSON格式,并将其作为HTTP响应发送给客户端。特点:支持Unicode字符,无需将非ASCII字符转义。某些字符(如<、>和&)会被自动转义为相应的Unicode......
  • 如何使用js获取当前的url和来源的url?
    在JavaScript中,你可以使用window.location对象来获取当前页面的URL和来源页面的URL。获取当前页面的URL你可以使用window.location.href来获取当前页面的完整URL。例如:varcurrentUrl=window.location.href;console.log(currentUrl);获取来源页面的URL来源页面的URL......
  • 织梦CMS首页URL优化:去掉index.html
    在使用织梦CMS搭建网站时,很多用户希望将首页URL从域名/index.html简化为域名,以提升网站的专业形象和用户体验。以下是实现这一目标的步骤:修改伪静态规则:登录织梦CMS后台,进入“系统”->“系统基本参数”->“核心设置”,找到“是否使用伪静态”,选择“是”。根据服务器类型(A......
  • Hugging Face功能介绍,及在线体验当前顶级文生图模型Flux
    HuggingFace简介对于非机器学习或深度学习领域的人士来说,HuggingFace这个名字可能并不耳熟。然而,随着近年来大规模模型的迅速崛起,相信大家或多或少都有所接触。如果你对这一领域感兴趣,并在GitHub上查阅过一些开源资料,那么你一定会频繁地看到HuggingFace的身影。例如,在DeepSeek......
  • 最新版Edge浏览器加载ActiveX控件技术——alWebPlugin中间件V2.0.30_alpha-春节版发布
     allWebPlugin简介   allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefox、Edge、360......