GIN实例讲解

news/2024/12/14 17:11:58 标签: gin

gin_0">第一个gin程序

package main

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

func main() {
    // 创建一个 Gin 引擎实例
    r := gin.Default()

    // 定义一个 GET 请求的路由,当访问 /hello 路径时执行匿名函数
    r.GET("/hello", func(c *gin.Context) {
        // 获取查询参数中的 name 参数值,默认为 "Guest"
        name := c.Query("name")
        if name == "" {
            name = "Guest"
        }
        
        // 向客户端返回一个问候语
        c.String(200, "Hello, %s!", name)
    })

    // 启动 Gin 应用,默认监听在 0.0.0.0:8080 地址
    r.Run()
}

导入 github.com/gin-gonic/gin 包,引入 Gin 框架。
创建一个默认的 Gin 引擎实例 r。
使用 r.GET() 方法定义一个 GET 请求的路由,当访问 /hello 路径时执行匿名函数。
在匿名函数中,通过 c.Query(“name”) 方法获取查询参数中的 name 参数值,如果未提供则默认为 “Guest”。
使用 c.String() 方法向客户端返回一个字符串响应,包含个性化的问候语。
使用 r.Run() 方法启动 Gin 应用,默认监听在 0.0.0.0:8080 地址。

在 Web 开发中,路由是指将客户端请求映射到处理程序的过程。简单来说,路由决定了客户端请求的 URL 应该由哪一段代码来处理。在 Web 应用程序中,通常会定义一系列的路由规则,以指定不同的 URL 请求应该由哪些处理程序来处理。

在上面的示例代码中,r.GET() 方法就是用来定义一个 GET 请求的路由。它告诉 Gin 框架当收到一个 GET 请求,并且请求的路径匹配指定的路径时,应该执行指定的处理函数。在这个例子中,我们定义了一个 GET 请求的路由 /hello,当客户端请求该路径时,会执行匿名函数来处理请求,并返回一个问候语。

至于为什么叫 GET 请求的路由,是因为在 HTTP 协议中,GET 是一种常用的请求方法之一,用于从服务器获取资源。除了 GET 请求外,还有 POST、PUT、DELETE 等请求方法,它们分别用于不同的操作。在路由定义时,我们可以根据不同的请求方法来定义不同的路由规则,以实现不同的功能。

POST 请求路由

package main

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

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

    // 定义一个 POST 请求的路由,当收到 /login 路径的 POST 请求时执行匿名函数
    r.POST("/login", func(c *gin.Context) {
        // 从请求的表单参数中获取用户名和密码
        username := c.PostForm("username")
        password := c.PostForm("password")

        // 简单验证用户名和密码,并返回相应的响应
        if username == "admin" && password == "password" {
            c.String(200, "Login success")
        } else {
            c.String(401, "Login failed")
        }
    })

    r.Run()
}

在浏览器中发送一个 POST 请求到 http://localhost:8080/login,并且传递合适的用户名和密码参数,将会触发执行匿名函数,并返回相应的响应。

PUT 请求路由

package main

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

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

    // 定义一个 PUT 请求的路由,当收到 /users/:id 路径的 PUT 请求时执行匿名函数
    r.PUT("/users/:id", func(c *gin.Context) {
        // 从请求的路径参数中获取用户 ID
        id := c.Param("id")

        // 从请求的表单参数中获取更新的用户信息
        name := c.PostForm("name")
        email := c.PostForm("email")

        // 根据用户 ID 更新用户信息,并返回相应的响应
        // 这里简化为直接返回更新成功的消息
        c.String(200, "Update user %s success", id)
    })

    r.Run()
}

发送一个 PUT 请求到 http://localhost:8080/users/123,并且传递合适的更新信息,将会触发执行匿名函数,并返回相应的响应。

DELETE 请求路由

package main

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

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

    // 定义一个 DELETE 请求的路由,当收到 /users/:id 路径的 DELETE 请求时执行匿名函数
    r.DELETE("/users/:id", func(c *gin.Context) {
        // 从请求的路径参数中获取用户 ID
        id := c.Param("id")

        // 根据用户 ID 删除用户信息,并返回相应的响应
        // 这里简化为直接返回删除成功的消息
        c.String(200, "Delete user %s success", id)
    })

    r.Run()
}

发送一个 DELETE 请求到 http://localhost:8080/users/123,将会触发执行匿名函数,并返回相应的响应。

这些示例展示了如何使用不同的路由方法来处理不同类型的 HTTP 请求,并根据请求的参数和路径来执行相应的操作。


http://www.niftyadmin.cn/n/5466838.html

相关文章

【Node】使用Node.js构建简单的静态页面生成器

使用Node.js构建简单的静态页面生成器 在现代的Web开发中,静态网站因其速度快、安全性高而越来越受到开发者的青睐。本文将介绍如何使用Node.js构建一个简单的静态页面生成器,通过这个小项目,你将了解到静态网站生成的基本原理和实现方法。 …

CentOS7安装flink1.17完全分布式

前提条件 准备三台CenOS7机器,主机名称,例如:node2,node3,node4 三台机器安装好jdk8,通常情况下,flink需要结合hadoop处理大数据问题,建议先安装hadoop,可参考 hadoop安…

【C++】哈希之位图

目录 一、位图概念二、海量数据面试题 一、位图概念 假如有40亿个无重复且没有排序的无符号整数,给一个无符号整数,如何判断这个整数是否在这40亿个数中? 我们用以前的思路有这些: 把这40亿个数遍历一遍,直到找到为…

xilinx fpga程序固化

一、前言 xilinx 旗下的产品主要有包含有处理器的SOC系列,也有只有纯逻辑的fpga,两者的程序固化的方法并不相同,本文介绍只包含纯逻辑而不涉及处理器的fpga的代码固化。 二、固化流程 将工程综合,实现,并得到比特流…

pip/conda导出或导入环境

目录 一、pip Option1: pip freeze 导出环境 导入环境 Option2: pipreqs工具 导出环境 导入环境 二、conda Option1: requirements.txt 导出环境 导入环境 Option2: myenv.yml 导出环境 导入环境 Python提供了强大的模块功能,能够方便开发者更加易于…

redis-BitMap(位图)使用方法

一,BitMap介绍 使用位存储,信息状态只有 0 和 1 Bitmap是一串连续的2进制数字(0或1),每一位所在的位置为偏移(offset),在bitmap上可执行AND,OR,XOR,NOT以及其它位操作。 二 ,应用场景 签到统计…

YOLOv8全网独家改进: 小目标 |新颖的多尺度前馈网络(MSFN) | 2024年4月最新成果

💡💡💡本文独家改进:多尺度前馈网络(MSFN),通过提取不同尺度的特征来增强特征提取能力,2024年最新的改进思路 💡💡💡创新点:多尺度前馈网络创新十足,抢先使用 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect…

Java:多线程相关知识概念

Java中的多线程是指在单个程序中并行执行多个线程(即执行路径或任务)的能力。多线程在Java中是一个核心概念,它允许应用程序更有效地利用CPU资源,同时还能进行并发操作。以下是Java中多线程相关的详细知识: 线程的基本…