Golang Gin HTTP 请求和参数解析

这篇具有很好参考价值的文章主要介绍了Golang Gin HTTP 请求和参数解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

gin 网络请求与路由处理


我们介绍了Gin框架,并做了Gin框架的安装,完成了第一个Gin工程的创建。

创建Engine

在gin框架中,Engine被定义成为一个结构体,Engine代表gin框架的一个结构体定义,其中包含了路由组、中间件、页面渲染接口、框架配置设置等相关内容。默认的Engine可以通过gin.Default进行创建,或者使用gin.New()同样可以创建。两种方式如下所示:

engine1 := gin.Default()
engine2 := gin.New()

gin.Default()和gin.New()的区别在于gin.Default()也使用gin.New()创建engine实例,但是会默认使用Logger和Recovery中间件。

  • Logger是负责进行打印并输出日志的中间件,方便开发者进行程序调试
  • Recovery中间件的作用是如果程序执行过程中遇到panic中断了服务,则Recovery会恢复程序执行,并返回服务器500内部错误。通常情况下,我们使用默认的gin.Default创建Engine实例。

处理HTTP请求


在创建的engine实例中,包含很多方法可以直接处理不同类型的HTTP请求。

HTTP请求类型


http协议中一共定义了八种方法或者称之为类型来表明对请求网络资源(Request-URI)的不同的操作方式,分别是:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。

虽然一共有八种请求操作类型,但是实际开发中常用的GET POST DELETE等几种。

get表示从网络上获取一种网络资源,post表示要向服务器提交一段数据,往往在使用的过程当中是在某个网页当中有一个表单数据提交的时候使用post。delete是在删除资源的时候执行。

如果要携带数据,会放在body当中,这样会将携带数据的名称和相应的数据在这里面填入就行了。 

Golang Gin HTTP 请求和参数解析

通用处理


engine中可以直接进行HTTP请求的处理,在engine中使用Handle方法进行http请求的处理。Handle 方法包含三个参数,具体如下所示:

func (group *RouterGroup) Handle(httpMethod string, relativePath string, handlers ...HandlerFunc) IRoutes
  • httpMethod:第一个参数表示要处理的HTTP的请求类型,是GET、POST、DELETE等8种请求类型中的一种。
  • relativePath:第二个参数表示要解析的接口,由开发者进行定义。
  • handlers:第三个参数是处理对应的请求的代码的定义。

 handler处理GET请求  DefaultQuery、Query


package main

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

// 使用handle方法处理/hello这样一个请求
func main() {
	//创建engine引擎对象
	engine := gin.Default()
	//请求路径 http://localhost:8080/hello?name=lucas 带参数name
	//匿名函数处理http的请求,context为请求上下文,携带一些属性和方法
	engine.Handle("GET", "/hello", func(c *gin.Context) {
		path := c.FullPath() //请求的接口
		fmt.Println(path)

		//获取参数,最后一个参数是获取不到时候的默认值为hello
		name := c.DefaultQuery("name", "hello")
		fmt.Println(name)

		//输出,处理完请求之后需要返回结果给前端
		c.Writer.Write([]byte("hello " + name))
	})

	engine.Run(":8000")
}

/hello
lucas
[GIN] 2023/04/25 - 10:53:09 | 200 |       333.7µs |       127.0.0.1 | GET      "/hello?name=lucas"

/hello
hello
[GIN] 2023/04/25 - 10:54:11 | 200 |            0s |       127.0.0.1 | GET      "/hello"

Golang Gin HTTP 请求和参数解析

Golang Gin HTTP 请求和参数解析

通过Handle方法第一个参数指定处理GET类型的请求,解析的接口是/hello。

Context是gin框架中封装的一个结构体,这是gin框架中最重要,最基础的一个结构体对象。

该结构体可以提供我们操作请求,处理请求,获取数据等相关的操作,通常称之为上下文对象,简单说为我们提供操作环境。

可以通过context.Query和context.DefaultQuery获取GET请求携带的参数。可以通过context.Writer.Write向请求发起端返回数据。

handler处理post请求  PostForm


//post http://localhost:8080/login
	//post请求携带数据不和get上面一样,而是放在请求的body里面,也就是请求体里面
	engine.Handle("POST", "/login", func(c *gin.Context) {
		path := c.FullPath() //请求的接口
		fmt.Println(path)

		//获取post表单当中数据的哪一个字段
		username := c.PostForm("username")
		password := c.PostForm("password")
		fmt.Println("username:", username, "password:", password)

		c.Writer.Write([]byte("username:" + username))
	})

Golang Gin HTTP 请求和参数解析

如上的案例,通过第一个参数指定了解析POST类型的请求,第二个参数指定解析的接口为/login。POST请求是以form表单的方式提交数据的,可以通过context.PostForm获取表单中提交的数据字段。

其他类型的HTTP请求也可以通过Handle方法处理对应类型的请求。

分类处理  路由


除了engine中包含的通用的处理方法以外,engine还可以按类型进行直接解析。engine中包含有get 方法、post方法、delete方法等与http请求类型对应的方法。

engine.GET() 处理GET请求

engine中包含GET方法处理HTTP的GET类型的请求。engine的GET方法包含两个参数,编程使用如下所示:

Golang Gin HTTP 请求和参数解析

package main

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

func main() {
	engine := gin.Default()
	//http://127.0.0.1/hello?name=lucas
	engine.GET("/hello", func(c *gin.Context) {
		fmt.Println(c.FullPath())

		//查询携带的字段名称,这个没有默认返回参数
		name := c.Query("name")
		fmt.Println("name:", name)

		c.Writer.Write([]byte("name is:" + name))
	})

	engine.Run()
}


[GIN-debug] Listening and serving HTTP on :8080
/hello
name: lucas
[GIN] 2023/04/26 - 09:06:37 | 200 |       297.4µs |       127.0.0.1 | GET      "/hello?name=lucas"

/hello
name:
[GIN] 2023/04/26 - 09:07:12 | 200 |       950.7µs |       127.0.0.1 | GET      "/hello?name1=lucas"
package main

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

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

	engine.POST("/login", func(c *gin.Context) {
		fmt.Println(c.FullPath())

		if name, exits := c.GetPostForm("username"); exits {
			fmt.Println("username is:", name)
		}

		if password, exits := c.GetPostForm("password"); exits {
			fmt.Println("password is:", password)
		}

	})

	engine.Run()
}


[GIN-debug] Listening and serving HTTP on :8080
/login
username is: lucas 
password is: 123456
[GIN] 2023/04/26 - 09:13:34 | 200 |      1.5881ms |       127.0.0.1 | POST     "/login"

 在解析接口的这个地方,通过:自定义变量的值,:id表示变量的值

package main

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

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

	engine.DELETE("/user/:id", func(c *gin.Context) {
		userID := c.Param("id")
		fmt.Println("userid is:", userID)
	})

	engine.Run()
}

Golang Gin HTTP 请求和参数解析

[GIN-debug] Listening and serving HTTP on :8080
userid is: 24
[GIN] 2023/04/26 - 10:05:25 | 200 |            0s |       127.0.0.1 | DELETE   "/user/24"

上面介绍了最常用的两种http处理请求的方式

  1. 一种是使用handler处理,需要指定具体的请求类型
  2. 其次是路由的方法post delete这种进行响应接口类型的处理。

上面同时也介绍了如何获取客户端提交的数据。post get delete.............................。 文章来源地址https://www.toymoban.com/news/detail-429615.html

到了这里,关于Golang Gin HTTP 请求和参数解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android网络编程,HTTP请求和Json解析

    以下代码模拟了点击按钮请求百度的网页源码: 其中需要注意的是Android在API27之后不再支持明文访问HTTP,需要在manifest文件中配置属性允许使用明文访问, 并且Url需要使用https layout.xml 字节流转换字符串工具类: 主类.java: 配置manifest.xml文件: 将上述代码中的webview相关内容

    2023年04月09日
    浏览(29)
  • 【Golang】golang中http请求的context传递到异步任务的坑

    在golang中,context.Context可以用来用来设置截止日期、同步信号,传递请求相关值的结构体。 与 goroutine 有比较密切的关系。 在web程序中,每个Request都需要开启一个goroutine做一些事情,这些goroutine又可能会开启其他的 goroutine去访问后端资源,比如数据库、RPC服务等,它们需要访

    2024年02月08日
    浏览(28)
  • 深度探讨 Golang 中并发发送 HTTP 请求的最佳技术

    💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】 🤟 基于Web端打造的:👉轻量化工具创作平台 💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在 Golang 领域,并发发送 HTTP 请求是优化 Web 应用程序的一项重要技能。本文探讨了实现此目的的各种方法

    2024年01月18日
    浏览(38)
  • 【golang】http.ListenAndServe源码解析

    ListenAndServe监听TCP地址addr,并且会使用handler参数调用Serve函数处理接收到的连接。handler参数一般会设为nil,此时会使用DefaultServeMux。 接下来我们看一下这个函数的主要源码流程。 Server 定义运行HTTP服务器的参数。Server的零值是一个有效的配置。 第一层相当于封装了一下创建

    2024年04月08日
    浏览(44)
  • golang如何用http.NewRequest创建get和post请求

    在Go语言中,使用 http.NewRequest 函数可以创建GET和POST请求。下面是一个示例代码,演示如何使用 http.NewRequest 创建GET和POST请求: 在上述示例中,我们首先创建了一个GET请求,指定了请求的URL为\\\"https://api.example.com/data\\\"。然后,我们使用 http.Client 类型的客户端发送该请求,并获取

    2024年02月02日
    浏览(33)
  • golang 发起 http 请求,获取访问域名的 ip 地址(net, httptrace)

    今天碰到了个需求,我要知道程序对外访问的 http 请求域名的 ip 地址。 直接查看 golang 的 net/http 包,发现 Response 中并没有我想要的 ip 信息。 考虑到在 OSI 七层模型中, ip 是网络层协议,而 http 是应用层协议。去翻了下 net 包,发现了基础用法。 先提一下,域名访问服务器

    2024年02月02日
    浏览(34)
  • 【Golang 接口自动化02】使用标准库net/http发送Post请求

    目录 写在前面 发送Post请求 示例代码 源码分析 Post请求参数解析 响应数据解析 验证 发送Json/XMl Json请求示例代码 xml请求示例代码 总结 资料获取方法 上一篇我们介绍了使用  net/http  发送get请求,因为考虑到篇幅问题,把Post单独拎了出来,我们在这一篇一起从源码来了解一

    2024年02月14日
    浏览(42)
  • 【Golang 接口自动化01】使用标准库net/http发送Get请求

    目录 发送Get请求 响应信息 拓展  资料获取方法 使用Golang发送get请求很容易,我们还是使用 http://httpbin.org 作为服务端来进行演示。 更多的响应内容我们查看安装路径的net包中Response struct 的信息,里面有详细的注释,参考路径: C:Gosrcnethttpresponse.go : 用过Python的同学都知

    2024年02月14日
    浏览(27)
  • HTTP四大参数类型及请求参数的方式和如何接收

    请求头参数顾名思义,是存放在请求头中发送给服务器的参数,服务器通过解析请求头获取参数内容。通常会存放本次请求的基本设置,以帮助服务器理解并解析本次请求的body体。 参数形式如: 在我们的SpringBoot中,通过 @RequestHeader 注解可以获取到。 Spring Boot 读取http head

    2024年02月03日
    浏览(29)
  • Java 发送Http请求携带中文参数时 请求报400的错误请求

    在 Java 中,URL 中不能直接包含中文字符,因为 URL 规范要求 URL 必须是 ASCII 字符。如果需要在 URL 中传递中文参数,需要对中文参数进行 URL 编码,将其转换为浏览器中的参数形式。可以使用 java.net.URLEncoder 类来进行 URL 编码。

    2024年02月11日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包