Go学习第十三章——Gin入门与路由

这篇具有很好参考价值的文章主要介绍了Go学习第十三章——Gin入门与路由。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 Gin框架介绍

github链接:https://github.com/gin-gonic/gin

中文文档:https://gin-gonic.com/zh-cn/docs/

学习链接(博主在bilibili有视频):http://www.fengfengzhidao.com/

1.1 基础介绍

Gin是一个轻量级的、高性能的web框架,由Golang语言开发。Gin的核心设计理念是提供快速建立API的开发方式,同时保持良好的性能和高度易用性。

下面是Gin框架的主要特点:

  1. 快速性能 – Gin采用了诸如Like-nginx等类似的底层库,因此Gin的性能非常高,可以达到每秒处理数百万个请求的水平。
  2. 简单易用 – Gin框架采用了类似于Martini的API设计,非常容易学习和使用。
  3. 模块化 – Gin的中间件机制使其易于构建和扩展应用程序。
  4. 松散耦合 – Gin的设计允许使用者在不破坏当前应用的前提下快速添加新的特性或更改现有特性。
  5. 适用范围广 – Gin的设计允许用户构建任何类型的web应用程序,包括API、代理、Websocket服务等。

除此之外,Gin框架还提供了大量的中间件来提供更加丰富的功能,例如日志、跨域请求、认证和授权、压缩等。

1.2 安装Gin

要求:Go 1.13 及以上版本

  1. 创建一个新项目

注意我们创建项目要添加一个国内的代理,不然下载会很慢或者失败

代理:GOPROXY=https://goproxy.cn,direct

Go学习第十三章——Gin入门与路由,golang,学习,gin,笔记,后端,开发语言

  1. 下载并安装Gin
go get -u github.com/gin-gonic/gin

然后,我们会在go.mod里面会发现多了很多东西,这些就Gin,直接使用

  1. 安装postman

主要是用于对接口进行调试的工具,有类似的工具都可以,例如:Apifox

postman官网:https://www.postman.com/downloads/?utm_source=postman-home

1.3 快速使用

  1. 创建文件夹和文件

我这里创建了一个GinStudy01_HelloWord的文件夹,在里面又创建了一个main文件夹,在里面创建main文件

  1. 将 gin 引入到代码中:
import "github.com/gin-gonic/gin"
  1. (可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包:
import "net/http"
  1. 写代码
package main

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

func main() {
	router := gin.Default()
	router.GET("/index", func(c *gin.Context) {
		c.String(http.StatusOK, "Hello World")
	})
    // 启动方式一
	router.Run(":8000") // 监听并在 0.0.0.0:8000 上启动服务
	// 启动方式二
	// http.ListenAndServe(":8000", router)
}

然后运行,等待一会,成功后,游览器访问:http://127.0.0.1:8000/index,会发现有Hello World

Go学习第十三章——Gin入门与路由,golang,学习,gin,笔记,后端,开发语言

  1. router:=gin.Default():这是默认的服务器。使用gin的Default方法创建一个路由Handler
  2. 然后通过Http方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把requestresponse都封装到了gin.Context的上下文环境中。
  3. 最后启动路由的Run方法监听端口。还可以用http.ListenAndServe(":8080", router),或者自定义Http服务器配置。

2 路由

本文将介绍Gin框架的路由功能,包括路由的基本使用、路由参数、路由分组、重定向、请求响应和中间件等。

2.1 基本路由

Router是Gin框架中的一个HTTP路由。Gin框架使用Router来接受HTTP请求,并根据请求的路径和HTTP方法来判断执行的处理函数。

Gin框架的Router支持HTTP的所有方法:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。

我们首先需要引入gin包:

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

然后创建一个Gin框架的Router:

r := gin.Default()
GET请求

使用GET方法,接受GET方式的HTTP请求。

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

    r.GET("/hello", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello World")
    })

    r.Run(":8080")
}

当我们访问http://localhost:8080/hello时,就能够在浏览器上看到输出了"Hello World"。

POST请求

使用POST方法,接受POST方式的HTTP请求。

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
// 这里只是把func给提出来,这样代码看起来更简洁了
func postRequest(c *gin.Context) {
	username := c.PostForm("username")
	password := c.PostForm("password")
	c.JSON(http.StatusOK, gin.H{
		"username": username,
		"password": password,
	})
}

func main() {
	r := gin.Default()
	// post请求
	r.POST("/login", postRequest)

	r.Run(":8080")
}

当我们通过POST方式,访问http://localhost:8080/login,然后通过POST方法提交username和password参数,就能够在返回结果中看到我们提交的参数值。

至于其他的请求,略。。。。

2.2 路由参数

Gin框架中的Router支持动态路由参数,在路由路径中使用冒号加参数名的方式表示参数。

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

    r.GET("/users/:id", func(c *gin.Context) {
        id := c.Param("id")
        c.String(http.StatusOK, "User ID: %s", id)
    })

    r.Run(":8080")
}

使用Param方法获取路由中的参数值。

当我们访问http://localhost:8080/users/123时,就能够在浏览器上看到输出了"User ID: 123"。

Go学习第十三章——Gin入门与路由,golang,学习,gin,笔记,后端,开发语言

2.3 路由分组

Gin框架的Router也支持路由分组,可以按照功能分组路由,这样能够更好地管理代码,并且能够为每个路由分组设置不同的中间件。

基本分组

我们可以使用Gin框架的Group方法将路由按照功能进行分组。

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

    api := r.Group("/api")
    {
        api.GET("/users", func(c *gin.Context) {
            c.String(http.StatusOK, "API Users")
        })

        api.GET("/products", func(c *gin.Context) {
            c.String(http.StatusOK, "API Products")
        })
    }

    admin := r.Group("/admin")
    {
        admin.GET("/users", func(c *gin.Context) {
            c.String(http.StatusOK, "Admin Users")
        })

        admin.GET("/products", func(c *gin.Context) {
            c.String(http.StatusOK, "Admin Products")
        })
    }

    r.Run(":8080")
}

我们可以将API路由和管理员路由分别归为一个Group,并在Group中设置对应的路由处理函数。

当我们访问http://localhost:8080/api/users和http://localhost:8080/admin/users时,就能够在浏览器上看到输出了"API Users"和"Admin Users"。

带中间件的分组

中间件还没有讲解,等后面学到了,可以再回来看~

我们还可以在路由分组中指定中间件,这样能够更好地进行控制,对于需要进行身份验证或者请求限制的路由,我们需要通过Group进行中间件的指定。

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

    api := r.Group("/api")
    {
        api.Use(AuthMiddleware())
        api.GET("/users", func(c *gin.Context) {
            c.String(http.StatusOK, "API Users")
        })

        api.GET("/products", func(c *gin.Context) {
            c.String(http.StatusOK, "API Products")
        })
    }

    admin := r.Group("/admin")
    {
        admin.Use(AuthMiddleware(), LimitMiddleware())
        admin.GET("/users", func(c *gin.Context) {
            c.String(http.StatusOK, "Admin Users")
        })

        admin.GET("/products", func(c *gin.Context) {
            c.String(http.StatusOK, "Admin Products")
        })
    }

    r.Run(":8080")
}

使用Use方法指定中间件,多个中间件可以通过逗号分隔。

2.4 重定向

在Gin中,我们可以使用路由重定向功能将一条路由重定向到另一条路由。

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

    r.GET("/users", func(c *gin.Context) {
        c.Redirect(http.StatusMovedPermanently, "/api/users")
    })

    r.GET("/api/users", func(c *gin.Context) {
        c.String(http.StatusOK, "API Users")
    })

    r.Run(":8080")
}

当我们访问http://localhost:8080/users时,Gin框架会将请求重定向到http://localhost:8080/api/users。文章来源地址https://www.toymoban.com/news/detail-723273.html

到了这里,关于Go学习第十三章——Gin入门与路由的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go学习第十五章——Gin参数绑定bind与验证器

    在Gin框架中, bind 用于绑定参数,即将请求参数绑定到结构体中。通过使用 bind ,我们可以方便地将请求参数与结构体字段进行绑定,从而更方便地处理和验证参数。 Gin框架提供了多种绑定方法,包括Query参数绑定、Form参数绑定、JSON参数绑定等。下面分别介绍这些方法的详

    2024年02月07日
    浏览(40)
  • GO——gin中间件和路由

    中间件 参考:https://learnku.com/articles/66234 结构 中间件是函数 中间件函数被放在调用链上 调用链的末尾是路由path对应的函数 执行过程 net/http包调用到gin的serverHTTP 参考:go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/gin.go:506 通过path找到路由对应的处理链,赋值给context 参考:go/pkg/mod/git

    2024年01月17日
    浏览(41)
  • Go-Gin框架 五、路由分组分文件

    Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter,速度提高了近 40 倍。 点击此处访问Gin官方中文文档。 新建文件main.go,内容如下: 运行后访问: http://localhost:8000/ Gin支持加载HTML模板, 然后根据模板参数进行配置并返回相应的数

    2024年02月13日
    浏览(41)
  • Go语言网络编程入门:TCP、HTTP、JSON序列化、Gin、WebSocket、RPC、gRPC示例

    在本文中,我们将介绍Go语言中的网络编程的不同方式,包括TCP、HTTP、Gin框架、WebSocket、RPC、gRPC的介绍与连接实例,并对所有示例代码都给出了详细的注释,最后对每种模式进行了总结。 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,提供

    2024年02月16日
    浏览(56)
  • Golang学习日志 ━━ 通过将gin-vue-admin项目上传到自己的仓库并且与原版保持更新来学习github操作

    gin-vue-admin是一套国人用golang开发的后台管理系统,本文是从作者早期原文中截取的一部分,后期会以本文为框架进行扩展说明。 官网:https://www.gin-vue-admin.com/ 学习视频:https://www.bilibili.com/video/BV1kv4y1g7nT/?p=6 在gin-vue-admin根目录里打开终端,执行 此时已经把自己的代码推到自

    2024年02月10日
    浏览(38)
  • golang微框架Gin

    Gin是一个golang的微框架,基于httprouter,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 Gin特征 速度快:基于基数树的路由,内存占用小,没有反射,可预测的APi性能 中间件支持 传入的http请求可以有中间件链和最终操作处理,例如:Logger,Aut

    2024年02月09日
    浏览(39)
  • [golang gin框架] 39.Gin商城项目-微服务实战之微服务架构

    单体架构在 中小企业内部 用的是非常多的,当 业务不复杂 , 团队规模不大 的时候,单体架构比微服务架构具有 更高的生产率 单体架构 当 业务比较复杂 , 并发量 比较大, 团队规模扩大的时候, 就需要引入微服务架构了,它比单体架构 具有 更高的生产率, 可以 节省成本 , 解

    2024年02月12日
    浏览(41)
  • golang Gin实现websocket

    golang使用 Gin实现 websocket,这里笔者重新搭建一个项目 项目名为 go-gin-websocket 在指定文件夹下,新建项目文件夹 go-gin-websocket 进入项目文件夹,打开cmd窗口,在项目(go-gin-websocket)文件夹路径下,执行初始化命令 go mod init go-gin-websocket 安装依赖 安装gin  安装websocket 在项

    2024年02月06日
    浏览(48)
  • javacv从入门到精通——第十三章javacv中FFmpegFrameGrabber的start方法执行时间过长,怎么优化?

    FFmpegFrameGrabber的start()方法执行时间过长,可能是由于FFmpeg库需要进行一些初始化操作,如打开视频文件、读取视频流信息、解码器初始化等。这些操作需要耗费一定的时间。在某些情况下,可能需要优化这些操作的执行效率,以提高程序的响应速度和性能。 以下是一些可能

    2024年02月10日
    浏览(97)
  • 解决GO安装gin框架(go get -u github.com/gin-gonic/gin)超时问题

    🍊gin框架github地址:https://github.com/gin-gonic/gin         按照官方文档安装gin,但是尝试了好几次,包括使用国内网络或者使用梯子,都超时失败了,爆了如下超时错误 🍊 解决方法如下 1、先查看go相关的配置 如上显示GOPROXY配置是https://proxy.golang.org,这个地址已经被墙了,

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包