前言

感谢开源项目gin-vue-admin,以及1010工作室的教程,项目文档
我只是在跟着学习,然后记录下笔记而已,可能会有新的代码加入,但是本质还是跟着学习的一个过程。

修改端口号

重新看一下上一篇中写的示例程序

package main

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

func main() {
	r := gin.Default() //启动gin路由,携带基础中间件启动

	//让启动的路由接收get请求,且是/ping,运行一个匿名函数,将gin的上下文传入
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{ //将接收的信息返 回
			"message": "pong",
		})
	})
	r.Run() 
}

可以发现最后是由Run()函数将服务运行起来的,所以在执行Run()时,可以更改端口号,例如这里如果使用端口号1010的话,只需要将1010传入Run()函数中。

r.Run(":1010")

这时重新运行程序,再用postman去进行请求,可以发现依然拿到了正确结果,说明已经可以通过1010接口访问到数据。

在这里插入图片描述
在这里插入图片描述
此时在代码中将所有的请求都定义出来:

package main

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

func main() {
	r := gin.Default() //启动gin路由,携带基础中间件启动

	r.GET("/path/:id", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.POST("/path", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.DELETE("/path/:id", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.PUT("/path", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run(":1010") // listen and serve on 0.0.0.0:8080
}

GET

get请求可以在网址中看见所携带的参数,即参数在url和uri中进行挂载。
URL:Uniform Resource Locator 统一资源定位符;
URI:Uniform Resource Identifier 统一资源标识符;

URL: 关键词-“资源定位”, 那就是通过写明路径的方式,表示出资源的位置,位置被指定,通常资源也就被指定,例如302班1列3排的同学,身份是能够被确定的。

URI: 关键词-“资源标识”, 一个名为小明的男同学。我们明确的知道了,有这么个人,性别男,名小明。

修改代码

然后再将GET中的修改下,

r.GET("/path/:id", func(c *gin.Context) {
		//将请求中的参数拿出来
		id := c.Param("id")
		user := c.Query("user")
		pwd := c.Query("pwd")


		c.JSON(200, gin.H{
			"id": id,
			"user": user,
			"pwd": pwd,
		})
	})

这里利用Param将请求中的地址栏的id(这里是123提取出来),和用Query将后面的参数user和pwd提取出来,然后将这三个参数返回
在这里插入图片描述
在这里插入图片描述
可以看见,postman中发起的请求已经拿到的了正确的请求返回。
这里如果请求中没有给用户名或者pwd,那么服务端是无法解析到对应参数的,所以返回中也将是空白。

在这里插入图片描述
在这里插入图片描述
其中Query是读取参数,当这个参数没有时给空,DefaultQuery是读取参数,当这个参数没有时给一个指定的默认值。

POST

参数在form中 、body中,或者在uri中
form是一种表单的形式提供给后台
body是常用的json进行交互

将post部分重写

r.POST("/path", func(c *gin.Context) {
		user := c.DefaultPostForm("user", "qqyking")
		pwd := c.PostForm("pwd")

		c.JSON(200, gin.H{
			"user": user,
			"pwd": pwd,
		})
	})

在postman中构建post请求
在这里插入图片描述
在这里插入图片描述
开始时也曾尝试url中带参数,然后使用post请求访问,但是都失败了。
其中PostForm是读取参数,当这个参数没有时给空,DefaultPostForm是读取参数,当这个参数没有时给一个指定的默认值。

DELETE

一般情况为uri,同样也可以为body
用法和GET基本相同,但是不同的是它也可以从body内取参数
然后重写DELETE

r.DELETE("/path/:id", func(c *gin.Context) {
		id := c.Param("id")
		c.JSON(200, gin.H{
			"id": id,
		})
	})

然后在postman中构建DELETE请求在这里插入图片描述
在这里插入图片描述

PUT

参数在form body或者uri中
将put部分重写

r.PUT("/path", func(c *gin.Context) {
		user := c.DefaultPostForm("user", "qqyking")
		pwd := c.PostForm("pwd")

		c.JSON(200, gin.H{
			"user": user,
			"pwd": pwd,
		})
	})

在postman中构建put请求
在这里插入图片描述
在这里插入图片描述
可以看出POST和PUT用法是一摸一样的,只不过请求的方式不同
如此一来就通过GIN的接口实现了增删改查

最后完整代码示例

package main

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

func main() {
	r := gin.Default() //启动gin路由,携带基础中间件启动 logger and recovery (crash-free) 中间件

	r.GET("/path/:id", func(c *gin.Context) {
		//将请求中的参数拿出来
		id := c.Param("id")
		user := c.Query("user")
		pwd := c.DefaultQuery("pwd", "123456")
		c.JSON(200, gin.H{
			"id": id,
			"user": user,
			"pwd": pwd,
		})
	})

	r.POST("/path", func(c *gin.Context) {
		user := c.DefaultPostForm("user", "qqyking")
		pwd := c.PostForm("pwd")

		c.JSON(200, gin.H{
			"user": user,
			"pwd": pwd,
		})
	})
	r.DELETE("/path/:id", func(c *gin.Context) {
		id := c.Param("id")
		c.JSON(200, gin.H{
			"id": id,
		})
	})
	r.PUT("/path", func(c *gin.Context) {
		user := c.DefaultPostForm("user", "qqyking")
		pwd := c.PostForm("pwd")

		c.JSON(200, gin.H{
			"user": user,
			"pwd": pwd,
		})
	})
	r.Run(":1010") // listen and serve on 0.0.0.0:8080
}
Logo

前往低代码交流专区

更多推荐