[GO] Gin入门
1. Gin基本使用
1.1 Gin入门
- Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
- 对于Golang而言,web框架的依赖要远比Python,Java之类要小,自身的net/http足够简单,性能也非常不错
- 借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范.
1.2 安装
要安装Gin 软件包,需要先安装GO并设置Go工作区.
- 首先需要安装GO,然后可以使用GO命令安装Gin.在go.mod同级目录执行以下命令.
go get -u github.com/gin-gonic/gin
3.Gin入门与源码
一共需要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入门相关推荐
- Go Gin 入门教程
Gin 简介 Gin 是使用 Go/golang 语言实现的 HTTP Web 框架,接口简洁.性能极高. Gin 特性 快速:路由不使用反射,基于Radix树,内存占用少. 中间件:HTTP请求,可 ...
- c++入门代码_Golang Gin 实战(一)| 快速安装入门
Golang Gin 实战(一)| 快速安装入门 Gin 是一个非常优秀的Golang Web Framework,它不光API友好,性能也非常高,并且设计简洁,便于入门.所以它(Gin)非常受欢迎, ...
- postman post gin 接收不到_golang web开发——gin实战入门
背景 在之前的一系列golang入门小节中,我们也算管中窥豹,大概了解了一些golang,了解了它的基本语法,在之前的章节中,很多大佬留言或者私信我说,我写的都太过简单,充其量就是一个golang的d ...
- Gin 快速入门知识点总结(奇淼)
Gin 快速入门总结 各种请求方式获取参数 绑定参数和参数验证 文件的上传和返回 读取文件 给前端返回文件 中间件和路由分组 分组 中间件 日志和日志格式 使用 GORM 进行数据库操作 GORM 结 ...
- GIN框架(GOLANG)讲解如何疯速入门
1.初始化项目: 1.初始化项目:go mod init 2.下载gin框架:go get -u github.com/gin-gonic/gin 可能用到的命令:go env -w GOSUMDB ...
- Golang 的Gin框架入门教学
学习Golang差不多有一个星期时间,开始自己做点小功能,练练手. Gin 介绍 Gin 是一个 Golang 写的 web 框架,具有高性能的优点,,基于 httprouter, 它提供了类似mar ...
- gin context和官方context_Go语言gin框架从入门到精通(3)
gin的渲染 1 各种数据格式的响应 json.结构体.XML.YAML类似于java的properties.ProtoBuf 分别对所有数据格式举个列子 func main() {r := gin. ...
- 【Gin框架】框架入门
阅读目录 一.Gin 介绍 二.Gin 环境搭建 三.golang 程序的热加载 四.Gin 框架中的路由 4.1.路由概述 4.2.简单的路由配置 4.3.c.String().c.JSON().c ...
- Go语言小程序开发快速入门——一、用Gin框架实现简单的信息获取
下面主要介绍如何用Go语言的Gin框架把信息通过接口传到小程序前端 1.准备 (1)注册一个微信小程序 (2)下载微信开发者工具 (3)下载Go语言编辑器,配置Go语言环境 2.新建一个小程序项目 在 ...
最新文章
- 波士顿动力机器狗在工厂打工的实录火了
- VI编辑器的操作模式
- 读书笔记_CLR.via.c#第十六章_数组
- spring mvc原理_Spring常见问题整理
- 使用matplotlib进行简单的数据展示
- java中如何生成随机数?
- zookeeper3.5.4源码环境搭建
- linux驱动编写(nand flash驱动)
- Open3d之计算点云凸包
- extjs6入门:用sencha cmd搭建简单的extjs6项目
- 硬件工程师物料清单BOM对比工具
- SSM员工工资管理系统(Java毕设项目)
- 肖申克的救赎【观影记录及经典台词摘录】
- Excel操作:使用Excel制作甘特图
- docker(9):高级网络配置
- 10分钟教你用python做个打飞机(超详细超入门教程)附源代码下载
- 计算机上面的字体怎么应用,字魂字体怎么放PS里面用 应用到PS的方法
- 牵丝戏计算机谱,急求牵丝戏计算器谱完整版!!!
- 华为交换机常见ARP操作
- Java运行乱码,Idea编码设置
热门文章
- 如何给Pepper机器人配置ROS使其可以到达指定地点
- 低功耗基础——Lib文件中对ICG的描述
- 获取门店出错(44)美团聚宝盆 门店映射报错
- [PC] 微软账号连接不上
- sparksql读取数据过大报java.lang.OutOfMemoryError: Java heap space
- JS显示团购剩下时间的代码整理
- 【福大/计院】转专业
- 阅读Designing Network Design Spaces(CVPR2020)
- 抖音运营从内容开始做起,抖音内容创作
- AppInventor 模拟器与AI伴侣 问题