go Gin安装及初始化操作示例

 更新时间:2022年04月15日 12:18:14   作者:Jeff的技术栈  
这篇文章主要介绍了gin安装及初始化,修改启动端口,get/post 请求参数,模型绑定shouldbind,自定义验证器/表单验证,等操作步骤,有需要的朋友可以借鉴参考下

第一步初始化

1.新建文件夹(项目名)

2.终端进入该项目,敲 go mod init gin-class 产生go.mode文件

3.golang打开,Go Modules设置GOPROXY=https://goproxy.io

4.新建mian.go,下面代码粘贴进去

5.运行

package main
import "github.com/gin-gonic/gin"
func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080
}

修改启动端口

# 默认是8080端口
r.Run(":8888")

get请求url取参数

//get请求   "/get/123?user=jeff&pwd=admin"
r.GET("/get/:id", func(c *gin.Context) {
		id := c.Param("id")
		user := c.DefaultQuery("user","jeff")
		pwd := c.Query("pwd")
		c.JSON(200, gin.H{
			"message": "hell gyy",
			"id":id,
			"user":user,
			"pwd":pwd,
		})
	})

Param:取“?”之前的参数

Query:取“?”之后的参数

DefaultQuery:优先取key值,没有就用默认值

Post请求获取form参数

r.POST("/post", func(c *gin.Context) {
		user := c.DefaultPostForm("user","jeff")
		pwd := c.PostForm("pwd")
		c.JSON(200, gin.H{
			"message": "hell gyy",
			"user":user,
			"pwd":pwd,
		})
	})

DefaultPostForm :优先取key值,没有就用默认值

PostForm:取key

模型绑定ShouldBind

ShouldBindJSON

package main
import "github.com/gin-gonic/gin"
type PostParams struct {
	Name string `json:"name"`
	Age int `json:"age"`
	Sex bool `json:"sex"`
}
func main() {
	r.POST("/testBind", func(c *gin.Context) {
		p := PostParams{}
		err := c.ShouldBindJSON(&p)
		if err != nil{
			c.JSON(400,gin.H{
				"msg":"出错!",
				"data":gin.H{},
			})
		}else{
			c.JSON(200,gin.H{
				"msg":"success",
				"data":p,
			})
		}
		c.JSON(200, gin.H{
		})
	})
	r.Run(":8888") // listen and serve on 0.0.0.0:8080
}

ShouldBinduri

package main
import "github.com/gin-gonic/gin"
func main() {
	r := gin.Default()  //携带中间件启动路由
	r.POST("/testBind/:name/:age/:sex", func(c *gin.Context) {
		p := PostParams{}
		err := c.ShouldBindUri(&p)
		if err != nil{
			c.JSON(400,gin.H{
				"msg":"出错!",
				"data":gin.H{},
			})
		}else{
			c.JSON(200,gin.H{
				"msg":"success",
				"data":p,
			})
		}
		c.JSON(200, gin.H{
		})
	})
	r.Run(":8888") // listen and serve on 0.0.0.0:8080
}
type PostParams struct {
	Name string `json:"name" uri:"name"`
	Age int `json:"age" uri:"age"`
	Sex bool `json:"sex" uri:"ses"`
}

ShouldBindQuery

package main
import "github.com/gin-gonic/gin"
func main() {
	r := gin.Default()  //携带中间件启动路由
	r.POST("/testBind", func(c *gin.Context) {
		p := PostParams{}
		err := c.ShouldBindQuery(&p)
		if err != nil{
			c.JSON(400,gin.H{
				"msg":"出错!",
				"data":gin.H{},
			})
		}else{
			c.JSON(200,gin.H{
				"msg":"success",
				"data":p,
			})
		}
		c.JSON(200, gin.H{
		})
	})
	r.Run(":8888") // listen and serve on 0.0.0.0:8080
}
type PostParams struct {
	Name string `json:"name" uri:"name" form:"name"`
	Age int `json:"age" uri:"age" form:"age"`
	Sex bool `json:"sex" uri:"ses" form:"sex"`
}

自定义验证器,表单验证

binding:"required,mustBig"

package main
import (
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-playground/validator/v10"
)
type PostParams struct {
	Name string `json:"name" uri:"name" form:"name"`
	Age int `json:"age" uri:"age" form:"age" binding:"required,mustBig"`
	Sex bool `json:"sex" uri:"ses" form:"sex"`
}
// 过滤年龄小于18
func mustBig(f1 validator.FieldLevel) bool {
	if f1.Field().Interface().(int) <=18{
		return false
	}
	return true
}
func main() {
	r := gin.Default()  //携带中间件启动路由
	if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
		v.RegisterValidation("mustBig", mustBig)
	}
	r.POST("/testBind", func(c *gin.Context) {
		p := PostParams{}
		err := c.ShouldBindJSON(&p)
		if err != nil{
			c.JSON(400,gin.H{
				"msg":"小于18岁了!",
				"data":gin.H{},
			})
		}else{
			c.JSON(200,gin.H{
				"msg":"success",
				"data":p,
			})
		}
		c.JSON(200, gin.H{
		})
	})
	r.Run(":8888") // listen and serve on 0.0.0.0:8080
}

以上就是gin安装及初始化操作示例的详细内容,更多关于gin安装及初始化的资料请关注脚本之家其它相关文章!

相关文章

  • go中如何获取本机ip地址

    go中如何获取本机ip地址

    这篇文章主要介绍了go中如何获取本机ip地址问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 如何利用Golang写出高并发代码详解

    如何利用Golang写出高并发代码详解

    今天领导问起为什么用Golang,同事回答语法简单,语言新,支持高并发。那高并发到底如何实现,下面这篇文章主要给大家介绍了关于如何利用Golang写出高并发代码的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • gin通过go build -tags实现json包切换及库分析

    gin通过go build -tags实现json包切换及库分析

    这篇文章主要为大家介绍了gin通过go build -tags实现json包切换及库分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • golang 基于 mysql 简单实现分布式读写锁

    golang 基于 mysql 简单实现分布式读写锁

    这篇文章主要介绍了golang 基于mysql简单实现分布式读写锁,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • GO语言实现列出目录和遍历目录的方法

    GO语言实现列出目录和遍历目录的方法

    这篇文章主要介绍了GO语言实现列出目录和遍历目录的方法,涉及ioutil.ReadDir()与filepath.Walk()的应用,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • Beego AutoRouter工作原理解析

    Beego AutoRouter工作原理解析

    这篇文章主要为大家介绍了Beego AutoRouter工作原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • GO语言的map类型实例详解

    GO语言的map类型实例详解

    这篇文章主要介绍了GO语言的map类型实例详解,包括对map的创建,赋值,排序,删除,等操作需要的朋友可以参考下
    2022-12-12
  • 掌握Golang中的select语句实现并发编程

    掌握Golang中的select语句实现并发编程

    Golang中的select语句用于在多个通道间选择可读或可写的操作,并阻塞等待其中一个通道进行操作。可以用于实现超时控制、取消和中断操作等。同时,select语句支持default分支,用于在没有任何通道可操作时执行默认操作
    2023-04-04
  • 浅谈Golang是如何读取文件内容的(7种)

    浅谈Golang是如何读取文件内容的(7种)

    这篇文章主要介绍了浅谈Golang是如何读取文件内容的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Golang请求fasthttp实践

    Golang请求fasthttp实践

    本文主要介绍了Golang请求fasthttp实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论