首页 > 其他分享 >Gin路由基础

Gin路由基础

时间:2022-10-19 11:33:36浏览次数:74  
标签:main http 基础 func gin Gin login password 路由

路由的基本使用

  gin 框架中采用的路由库是基于httprouter做的

  地址为:https://github.com/julienschmidt/httprouter

基本路由

package main

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

func funcPost(c *gin.Context)  {
	c.String(http.StatusOK, "post请求")
}
func main() {
	r := gin.Default()
	r.GET("/", func(c *gin.Context) {
		c.String(http.StatusOK, "hello word")
	})
	r.POST("/",funcPost)
	//r.DELETE()
	//r.PUT()
	//r.OPTIONS()
	
	//监听端口默认为8080
	r.Run(":8000")
}

获取路径中参数(动态路由)

  可以通过Context的Param方法来获取API参数

  例子:

    localhost:8000/user/lqz/nb

    /:name表示一个字符串或int类型

    /*action表示任意字符串,包括/,如 /nb/hadsome,*号类型的参数,表示匹配所有

package main

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

func main() {
	r := gin.Default()
	r.GET("/user/:name/*action", func(c *gin.Context) {
		name := c.Param("name")
		action := c.Param("action")
		fmt.Println(action)
		//把字符串开头/截取掉
		action = strings.Trim(action, "/")
		fmt.Println(action)
		c.String(http.StatusOK, name+" is "+action)
	})
	//默认为监听8080端口
	r.Run(":8000")
} 

 

 

 获取请求地址中参数

  URL参数可以通过DefaultQuery()或Query()方法获取

  DefaultQuery()若参数不存在,返回默认值,Query()若不存在,返回空串

package main

import (
	"fmt"
	"net/http"

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

func main() {
	r := gin.Default()
	r.GET("/user", func(c *gin.Context) {
		//指定默认值
		//http://localhost:8080/user 才会打印出来默认的值
		//name := c.DefaultQuery("name", "世界")
		name := c.Query("name")
		c.String(http.StatusOK, fmt.Sprintf("hello %s", name))
	})
	r.Run()
}

  不传递参数输出的结果:

 

 

   传递参数输出的结果:

 

 

 获取表单参数

  表单传输为post请求,http常见的传输格式为四种:

    application/json

    application/x-www-form-urlencoded

    application/xml

    multipart/form-data

  表单参数可以通过PostForm()方法获取,该方法默认解析的是x-www-form-urlencoded或from-data格式的参数

  Json 编码格式解析到结构体

    客户端传参,后端接收并解析到结构体定

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
// 定义接收数据的结构体
type Login struct {
	// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
	User    string `json:"username" binding:"required"`
	Password string `json:"password" binding:"required"`
}

func main() {
	// 1.创建路由
	r := gin.Default()
	// JSON绑定
	r.POST("/loginJSON", func(c *gin.Context) {
		// 声明接收的变量
		var login Login
		// 将request的body中的数据,自动按照json格式解析到结构体(只能解析json格式)
		if err := c.ShouldBindJSON(&login); err != nil {
			// 返回错误信息
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		// 判断用户名密码是否正确
		if login.User == "lqz" && login.Password == "123" {
			c.JSON(http.StatusBadRequest, gin.H{"status": "100", "msg": "登陆成功"})
		}else {
			c.JSON(http.StatusOK, gin.H{"status": "101","msg": "用户名或密码错误"})
		}

	})
	r.Run(":8000")
}
使用postman测试,编码使用json格式,向http://127.0.0.1:8000/loginJSON发送post请求

{"username":"lqz","password":"123"}

post或get提交数据解析到结构体

  ShouldBind会按照下面的顺序解析请求中的数据完成绑定:

    如果是 GET 请求,http://127.0.0.1:8000/loginForm/?username=lqz&password=123

    如果是 POST 请求,三种编码格式都支持

package main

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

// 定义接收数据的结构体
type Login struct {
	// binding:"required"修饰的字段,若接收为空值,则报错,是必须字段
	User     string `form:"username" json:"username" uri:"username" binding:"required"`
	Password string `form:"password" json:"password" uri:"password"  binding:"required"`
}

func main() {
	router := gin.Default()
	// 绑定JSON的示例 ({"username": "lqz", "password": "123"})
	router.POST("/loginJSON", func(c *gin.Context) {
		var login Login
		if err := c.ShouldBind(&login); err == nil {
			c.JSON(http.StatusOK, gin.H{
				"user":     login.User,
				"password": login.Password,
			})
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})

	// 绑定QueryString示例 (http://127.0.0.1:8000/loginForm/?username=lqz&password=123)
	router.GET("/loginForm", func(c *gin.Context) {
		var login Login
		// ShouldBind()会根据请求的Content-Type自行选择绑定器
		if err := c.ShouldBind(&login); err == nil {
			c.JSON(http.StatusOK, gin.H{
				"user":     login.User,
				"password": login.Password,
			})
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})
	
	router.Run(":8000")
}

  

标签:main,http,基础,func,gin,Gin,login,password,路由
From: https://www.cnblogs.com/zhaoyuanshi/p/16805616.html

相关文章

  • plopjs 的基础使用方法
    constfs=require('fs');constpath=require('path');constactionsall=fs.readFileSync(path.resolve(__dirname,'./commitApps.txt'),'utf-8');constnameDi......
  • nginx本地配置web项目-layui
    nginx安装配置以及配置本地web项目nginx下载和安装介绍nginx(enginex)是一个高性能的HTTP和反向代理web服务器,其他的介绍自己百度去看下载https://nginx.org/en/downl......
  • 『现学现忘』Git基础 — 36、标签tag(一)
    目录1、标签介绍2、列出标签3、创建标签(1)标签的分类(2)附注标签(3)轻量标签4、后期打标签1、标签介绍软件的某个发行版本所对应的,其实就是软件开发过程中,某一个阶段的最后一......
  • vi命令基础
    一、vi的基本概念基本上vi可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)命令行模式commandmode)......
  • 基础篇——JSX
    一、JSX用于描述UI的JavaScript扩展语法,是UI描述和UI数据之间的桥梁。1,语法JSX本质上还是JavaScript。①基本语法和XML语法相同,都是使用成对的标签构成一个树状结构的......
  • 基础篇——组件
    二,组件1,组件有两种定义方式:class(类组件)和使用函数(函数组件)class:继承自React.Component内部必须定义render方法,返回该组件UI的React元素使用函数:接收props作为......
  • 基础组件(一)
    1.TextInput允许用户输入文本的基础组件.属性onChangeText 接受一个函数,而此函数会在文本变化时被调用。onSubmitEditing 在文本被提交后(用户按下软键盘上的提交键)调用 ......
  • Gin的请求与响应
    请求Gin的请求对象被封装在gin.Context这个结构体指针中fmt.Println(c.Request.Method)//请求方式fmt.Println(c.Request.Header)//请求头fmt.Println(c.Re......
  • 【高等数学基础进阶】微分中值定理及导数应用
    一、微分中值定理定理1(费马引理):如果函数$f(x)$在$x_{0}$处可导,且在$x_{0}$处取得极值,那么$f'(x_{0})=0$ 定理2(罗尔定理):若$f(x)$在$[a,b]$上连续$f(x)$在$(a,b)$......
  • Jetpeck paging3实践(1)——无限加载网页列表数据
    Jetpeckpaging3实践(1)——无限加载网页列表数据一、问题背景抽空研究一下jetpeck相关库的使用,来看一下paging3,话不多说,一步步完成paging3的demo,直接上代码。二、实现方案......