1. Gin基本使用

1.1 Gin入门

  • Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
  • 对于Golang而言,web框架的依赖要远比Python,Java之类要小,自身的net/http足够简单,性能也非常不错
  • 借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范.

1.2 安装

要安装Gin 软件包,需要先安装GO并设置Go工作区.

  1. 首先需要安装GO,然后可以使用GO命令安装Gin.在go.mod同级目录执行以下命令.
go get -u github.com/gin-gonic/gin

3.Gin入门与源码

一共需要3步.

  1. 创建路由
  2. 路由绑定
  3. 启动监听
func main() {// 1. 创建路由r := gin.Default()// 2. 路由绑定r.GET("/", func(c *gin.Context) {c.String(200, "ok")})// 3. 启动监听fmt.Println("http://192.168.31.1:8080")r.Run(":8080")
}

1.3 gin核心概念

  • Engine 容器对象,整个框架基础
  • Engine.trees 负责存储路由和handle方法的映射,采用类似字典树的结构
  • Engine.RouterGroup 其中Handlers存储着所有中间件
  • Context上下文对象,负责处理请求和回应,其中handlers是存储处理请求时中间件和处理方法的.

2. gin 路由

2.1 无参路由

不传递任何数据

func main() {// 1. 定义路由r := gin.Default()// 2. 定义路由r.GET("/hello", HelloHandler)// 3. 启动监听fmt.Println("http://192.168.31.1:8080/hello")r.Run(":8080")
}func HelloHandler(c *gin.Context) {c.String(200, "hello world")
}

2.2 Api传参

func main() {// 1. 定义r := gin.Default()r.GET("/book/:id", GetBookHandler)fmt.Println("http://localhost:8080/")r.Run(":8080")
}func GetBookHandler(c *gin.Context) {bookID := c.Param("id")fmt.Println(bookID, "------->")book := "你找的书:" + bookID + "已经找到\n"c.String(200, book)
}

2.3 Url传参

func main() {r := gin.Default()r.GET("/user", UrlGetHandler)fmt.Println("http://192.168.31.1:8080/")r.Run(":8080")
}
func UrlGetHandler(c *gin.Context) {username := c.Query("username")password := c.Query("password")output := "你输入的用户名是:" + username + "   密码是:" + passwordc.String(200, output)
}

设置默认值

func main() {r := gin.Default()r.GET("/user", UrlGetHandler)fmt.Println("http://192.168.31.1:8080/")r.Run(":8080")
}
func UrlGetHandler(c *gin.Context) {username := c.Query("username")//password := c.Query("password")password := c.DefaultQuery("password", "你没有输入密码")output := "你输入的用户名是:" + username + "   密码是:" + passwordc.String(200, output)
}

如果这里没有传值就会用默认值替代

如果传入值,那么就用传入的值.

2.4 shouldBind

用来解析Post请求中复杂的Json数据

func main() {r := gin.Default()r.POST("/user/login", LoginHandler)r.Run(":8080")
}type Login struct {Username string `json:"username"`Password string `json:"password"`
}func LoginHandler(c *gin.Context) {var login Loginif err := c.ShouldBind(&login); err != nil {c.String(400, "err")return}Code := login.Username + "  Login Succeeded!"c.String(200, Code)
}

也可以将某个参数设为必须

func main() {r := gin.Default()r.POST("/user/login", LoginHandler)r.Run(":8080")
}type Login struct {Username string `json:"username" binding:"required"`Password string `json:"password" binding:"required"`
}func LoginHandler(c *gin.Context) {var login Loginif err := c.ShouldBind(&login); err != nil {fmt.Println(err)c.String(400, "err")return}Code := login.Username + "  Login Succeeded!"c.String(200, Code)
}

当没有传该参数时就会报错

3. 数据返回Response

3.1 String字符串返回

func main() {r := gin.Default()r.GET("/response", ResponseHandler)r.Run(":8080")
}
func ResponseHandler(c *gin.Context) {msg := "success response"c.String(200, msg)
}

3.2 返回Json数据

func main() {r := gin.Default()r.GET("/response", JsonHandler)r.Run(":8080")
}
func JsonHandler(c *gin.Context) {type Data struct {Msg  string `json:"msg"`Code int    `json:"code"`}d := Data{Msg:  "success",Code: 200,}c.JSON(200, d)
}

3.3 直接通过gin.H返回

直接用gin.H将json数据进行返回,返回效果和上面效果一样

func JsonHandler(c *gin.Context) {c.JSON(200, gin.H{"msg":  "success","code": 200,})
}

3.4 路由重定向

func main() {r := gin.Default()r.GET("/response/json", JsonHandler)r.GET("/response/baidu", ResponseRedirHandler)r.Run(":8080")
}
func ResponseHandler(c *gin.Context) {msg := "success response"c.String(200, msg)
}
func JsonHandler(c *gin.Context) {c.JSON(200, gin.H{"msg":  "success","code": 200,})
}
func ResponseRedirHandler(c *gin.Context) {c.Redirect(302, "https://www.baidu.com")
}

4. 路由分发

一个项目有非常多的模块,每个模块维护自己的路由.主路由在main.go中进行注册

初始化项目

go mod init demo_route_layer     // 初始化项目
go mod tidy                       // 更新项目中使用的模块
go get github.com/gin-gonic/gin     // 下载go模块

main.go

import ("demo_route_layer/routers" // 导入本地模块"github.com/gin-gonic/gin"
)func main() {r := gin.Default()// 注册路由routers.LoadUsers(r)routers.LoadBook(r)r.Run(":8080")
}

routers/users.go

// 分层注册路由
func LoadUsers(r *gin.Engine) {r.GET("/user", UserHandler)}func UserHandler(c *gin.Context) {c.String(200, "用户模块分发")
}

routers/book

import "github.com/gin-gonic/gin"func LoadBook(r *gin.Engine) {r.GET("/book", BooksHandler)
}
func BooksHandler(c *gin.Context) {c.String(200, "图书模块返回")
}

[GO] Gin入门相关推荐

  1. Go Gin 入门教程

    Gin 简介 Gin 是使用 Go/golang 语言实现的 HTTP Web 框架,接口简洁.性能极高. Gin 特性 快速:路由不使用反射,基于Radix树,内存占用少. 中间件:HTTP请求,可 ...

  2. c++入门代码_Golang Gin 实战(一)| 快速安装入门

    Golang Gin 实战(一)| 快速安装入门 Gin 是一个非常优秀的Golang Web Framework,它不光API友好,性能也非常高,并且设计简洁,便于入门.所以它(Gin)非常受欢迎, ...

  3. postman post gin 接收不到_golang web开发——gin实战入门

    背景 在之前的一系列golang入门小节中,我们也算管中窥豹,大概了解了一些golang,了解了它的基本语法,在之前的章节中,很多大佬留言或者私信我说,我写的都太过简单,充其量就是一个golang的d ...

  4. Gin 快速入门知识点总结(奇淼)

    Gin 快速入门总结 各种请求方式获取参数 绑定参数和参数验证 文件的上传和返回 读取文件 给前端返回文件 中间件和路由分组 分组 中间件 日志和日志格式 使用 GORM 进行数据库操作 GORM 结 ...

  5. GIN框架(GOLANG)讲解如何疯速入门

    1.初始化项目: 1.初始化项目:go mod init  2.下载gin框架:go get -u github.com/gin-gonic/gin 可能用到的命令:go env -w GOSUMDB ...

  6. Golang 的Gin框架入门教学

    学习Golang差不多有一个星期时间,开始自己做点小功能,练练手. Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter, 它提供了类似mar ...

  7. gin context和官方context_Go语言gin框架从入门到精通(3)

    gin的渲染 1 各种数据格式的响应 json.结构体.XML.YAML类似于java的properties.ProtoBuf 分别对所有数据格式举个列子 func main() {r := gin. ...

  8. 【Gin框架】框架入门

    阅读目录 一.Gin 介绍 二.Gin 环境搭建 三.golang 程序的热加载 四.Gin 框架中的路由 4.1.路由概述 4.2.简单的路由配置 4.3.c.String().c.JSON().c ...

  9. Go语言小程序开发快速入门——一、用Gin框架实现简单的信息获取

    下面主要介绍如何用Go语言的Gin框架把信息通过接口传到小程序前端 1.准备 (1)注册一个微信小程序 (2)下载微信开发者工具 (3)下载Go语言编辑器,配置Go语言环境 2.新建一个小程序项目 在 ...

最新文章

  1. 波士顿动力机器狗在工厂打工的实录火了
  2. VI编辑器的操作模式
  3. 读书笔记_CLR.via.c#第十六章_数组
  4. spring mvc原理_Spring常见问题整理
  5. 使用matplotlib进行简单的数据展示
  6. java中如何生成随机数?
  7. zookeeper3.5.4源码环境搭建
  8. linux驱动编写(nand flash驱动)
  9. Open3d之计算点云凸包
  10. extjs6入门:用sencha cmd搭建简单的extjs6项目
  11. 硬件工程师物料清单BOM对比工具
  12. SSM员工工资管理系统(Java毕设项目)
  13. 肖申克的救赎【观影记录及经典台词摘录】
  14. Excel操作:使用Excel制作甘特图
  15. docker(9):高级网络配置
  16. 10分钟教你用python做个打飞机(超详细超入门教程)附源代码下载
  17. 计算机上面的字体怎么应用,字魂字体怎么放PS里面用 应用到PS的方法
  18. 牵丝戏计算机谱,急求牵丝戏计算器谱完整版!!!
  19. 华为交换机常见ARP操作
  20. Java运行乱码,Idea编码设置

热门文章

  1. 如何给Pepper机器人配置ROS使其可以到达指定地点
  2. 低功耗基础——Lib文件中对ICG的描述
  3. 获取门店出错(44)美团聚宝盆 门店映射报错
  4. [PC] 微软账号连接不上
  5. sparksql读取数据过大报java.lang.OutOfMemoryError: Java heap space
  6. JS显示团购剩下时间的代码整理
  7. 【福大/计院】转专业
  8. 阅读Designing Network Design Spaces(CVPR2020)
  9. 抖音运营从内容开始做起,抖音内容创作
  10. AppInventor 模拟器与AI伴侣 问题