Gin集成(五):集成Redis操作库
1.介绍redis官网推荐使用redigo,截止到今天Github Start是8.2k,但 go-redis 使用的人更多,并且go-redis封装得更好。截止到今天Github Start 是12.1k。
1.1 集成流程
2.安装1go get github.com/go-redis/redis/v8
3. 配置3.1 编辑主配置文件位置:./config.yaml
1234567891011121314app: ...log: ...mysql: ...jwt: ...redis: host: 127.0.0.1 port: 6379 password: # 密码(可为空) defaultDB: 0 # 默认DB dialTimeout: 5s #redis连接超时时间.默认5s
3.2 新增结构体文件位置: ./config/redis.go
1234567891011/** * @Description redis配置 **/package configtype redis struct { Addr string ...
Gin集成(四):集成JWT
1. 介绍JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。
jwt-go 是使用Go语言实现的Json web token (JWT),目前GitHub Start 9.8k,源码地址: https://github.com/dgrijalva/jwt-go,从版本3.2.1开始,源码地址变更为: https://github.com/golang-jwt/jwt,需要下载最新版本时,可以使用这个地址。
1.2 集成示意图
2. 配置2.1 编辑主配置文件位置:./config.yaml
12345678910app: ...log: ...mysql: ...jwt: secret: shershon # jwt生成密钥 issuer: 唐小山 # 签发人 expire: 3h # 有效时间,值如: 30s|10min|1h
2.2 新增结构体文件位置: ./config/jwt.go
123456789101112/** * @Descript ...
Gin集成(三):集成全功能orm框架-gorm
1. 介绍gorm是一个使用Go语言编写的ORM框架。 它文档齐全,对开发者友好,支持主流数据库。具体使用可参考之前的文章Go常用包(十九):全功能ORM框架(gorm)
1.1 集成流程
1.2 涉及目录
2. 配置2.1 编辑主配置./config.yaml1234567891011121314151617181920212223mysql: host: 127.0.0.1 port: 3306 user: root password: root database: test charset: utf8mb4 # 要支持完整的UTF-8编码,需设置成: utf8mb4 parseTime: true # 解析time.Time类型 timeZone: Local # 时区,若设置 Asia/Shanghai,需写成: Asia%2fShanghai defaultStringSize: 255 # string 类型字段的默认长度 disableDatetimePrecision: true # 禁用 datetime 精度,MySQL 5.6 之前的数据库不支 ...
Gin集成(二):集成高性能日志zap
1.项目介绍Gin框架学习使用,并实践常用包在Gin框架中的集成和使用。源码地址: https://github.com/shershon1991/gin-api-template.git
1.1 项目结构123456789101112├── api # 接口├── config # 配置├── core # 核心代码├── global # 全局变量和常量├── initialize # 初始化相关├── logs # 日志目录├── main.go # 启动文件├── model # 实体├── router # 路由 └── middleware #中间件├── test # 单元测试目录└── utils # 工具包
1.2 集成流程
2.安装1234# 安装zapgo get -u go.uber.org/zap# 安装lumberjack(日志切割和打包)go get -u github.com/natefinch/lumberjack
3.配置3.1 编辑app.yaml12345678910111213141516...log: path: ./logs # ...
Gin集成(一):集成viper配置解析包
1.介绍Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。目前Star 15.8k,它支持以下特性:
设置默认值
从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
实时监控和重新读取配置文件(可选)
从环境变量中读取
从远程配置系统(etcd或Consul)读取并监控配置变化
从命令行参数读取配置
从buffer读取配置
显式配置值
2.项目介绍Gin框架学习使用,并实践常用包在Gin框架中的集成和使用。源码地址: https://github.com/shershon1991/gin-api-template.git
2.1 项目结构123456789101112├── api # 接口├── config # 配置├── core # 核心代码├── global # 全局变量和常量├── initialize # 初始化相关├── logs # 日志目录├── main.go # 启动文件├── mode ...
Gin框架(十二):更多HTTP服务使用
1.静态文件服务1.1 代码1234567891011package mainimport "github.com/gin-gonic/gin"func main() { engine := gin.Default() // 静态图片 engine.Static("/img","./public/img") // 静态文件 engine.StaticFile("/favicon.ico","./public/favicon.ico") // 启动服务 _ = engine.Run()}
1.2 目录结构
1.3 请求示例12345# 请求图片http://127.0.0.1:8080/img/b.jpghttp://127.0.0.1:8080/img/c.jpg# 请求文件http://127.0.0.1:8080/favicon.ico
2.重定向123456789101112131415161718192021222 ...
Gin框架(十一):验证器(validator)
1.介绍validator是一个开源的验证器包,可以快速校验输入信息是否符合自定规则。目前Star 7.8k,源码地址: https://github.com/go-playground/validator
1.1 安装1go get github.com/go-playground/validator
1.2 引用1import "github.com/go-playground/validator"
1.3 示例代码:
123456789101112131415161718192021222324252627282930313233343536package mainimport ( "fmt" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10")// 定义一个添加用户参数结构体type AddUserPost struct { Name string `json:"na ...
Gin框架(十):日志使用(logrus+lumberjack)
1.框架自带gin框架自带日志记录功能,通过fmt.Fprint和fmt.Fprintf来记录日志信息,默认是将日志写到终端,可以通过gin.DefaultWriter来设置写入文件。
1.1 终端禁用颜色1gin.DisableConsoleColor()
1.2 只写入文件1234567891011121314151617181920// 日志记录使用func main() { // 禁用控制台颜色,将日志写入文件时不需要控制台颜色 gin.DisableConsoleColor() // 记录到指定文件 f, _ := os.Create("gin.log") gin.DefaultWriter = io.MultiWriter(f) // 创建容器 engine := gin.Default() engine.GET("/log", func(context *gin.Context) { // 记录日志 _, _ = fmt.Fprint ...
Gin框架(九):BasicAuth中间件使用
1.什么是BasicAuth?Basic Auth是一种开放平台认证方式,简单的说就是需要你输入用户名和密码才能继续访问。
2.在单路由中使用 如果需要针对单个路由使用,要在单路由中注册BasicAuth中间件即可。
2.1 代码1234567891011121314151617// 使用BasicAuth中间件func main(){ engine := gin.Default() // 设置账号和密码,key:代表账号,value:代表密码 ginAccounts := gin.Accounts{ "user":"password", "abc":"123", } // 注册路由和中间件 engine.GET("/test",gin.BasicAuth(ginAccounts), func(context *gin.Context) { // 获取中间件BasicA ...
Gin框架(八):中间件
中间件(英语:Middleware),又译中间件、中介层,是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。
1.介绍在Gin框架中,中间件本质上是gin.HandlerFunc 函数,如果我们要自定义中间件,只需要返回类型是gin.HandlerFunc 即可。
在Gin框架中,使用中间件可分为以下几种场景:
全局使用
单个路由使用
路由组使用
2.使用2.1 全局使用在gin.Default()函数中,默认注册全局中间件Logger、Recovery,具体代码如下:
123456789func Default() *Engine { // 打印debug信息 debugPrintWARNINGDefault() // 创建引擎 engine := New() // 注册全局中间件 engine.Use(Logger(), Recovery()) return engine}
2.2 单个路由使用123456789101112func m ...
Gin框架(七):文件上传
1.介绍在Gin框架中已经支持文件上传,包括单文件上传和多文件上传。
2. 单文件上传在Gin框架中可以通过FormFile("param")来接收上传的单个文件信息,具体使用参考下面代码:
2.1 代码示例12345678910111213141516171819202122232425262728293031323334353637383940//--- main.go ---------------package mainimport ( "github.com/gin-gonic/gin" "go-use/practise")func main() { // 创建一个默认的路由引擎 engine := gin.Default() // 注册路由 practise.TestRecFile(engine) _ = engine.Run()}//---file_receive.go-------// 接收单个文件func TestRecFile(engine *g ...
Gin框架(六):参数绑定
1.介绍在Gin框架中参数不但能通过指定key接收,也可以直接绑定到结构体中,本篇主要讲解怎么直接绑定到结构体中,若要查看通过指定key接收,可查看历史文章Gin框架(五):参数接收;
1.1 绑定方法Gin提供了Must bind 和 Should bind两种类型的绑定方法,这两种类型对应的方法如下:
功能
Must bind方法
Should bind方法
Bind
ShouldBind
绑定JSON
BindJSON
ShouldBindJSON
绑定XML
BindXML
ShouldBindXML
绑定GET
BindQuery
ShouldBindQuery
绑定YAML
BindYAML
ShouldBindYAML
a.MustBindWith和ShouldBindWith
Bind*类型的方法是对MustBindWith封装;Should*类型的方法是对ShouldBindWith的封装;
1.2 绑定语法定义被绑定的结构体
123type StructName struct { Xxx type `form ...
Gin框架(五):参数接收
1.路由参数1.1 Param当注册路由格式为:/path/:a/:b 时,:x指的就是路由参数,可以直接通过Param("x")获取值信息。
a.代码示例:
12345678910111213141516171819202122232425262728293031323334353637383940package mainimport ( "github.com/gin-gonic/gin" // 引入Gin框架)func main() { // 创建一个默认的路由引擎 engine := gin.Default() // 注册路由 engine.GET("/test/:name", func(context *gin.Context) { // 接收参数 name := context.Param("name") context.JSON(200, gin.H{ "msg ...
Gin框架(四):路由组
1.什么是路由组?从字面意思理解,路由组指的就是一组路由。那么什么样的路由可以归类到一组呢?在实际使用中,比较常见的场景的是根据版本分组。比如下图
2.使用语法在Gin框架中提供了一个函数Group可以将路由进行分组管理。使用语法如下:
a.不嵌套分组:
123456789v1 := engine.Group("v1"){ v1.GET("/path/xxx", func(context *gin.Context) { ... }) v1.POST("/user/xxx", func(context *gin.Context) { ... })}
b.嵌套分组:
123456789101112api := engine.Group("api"){ user := api.Group("user") { user.GET(&qu ...
Gin框架(三):路由初使用
1.介绍Gin框架的路由功能是基于httprouter(https://github.com/julienschmidt/httprouter)设计的,httprouter是一个由golang实现的路由组件。httprouter使用基数树(也叫基数特里树或压缩前缀树)这种数据结构来维护映射路由关系,通过前缀树快速路由。同时其里面的HttpRouter结构体实现了golang的net.http.server的Handler接口,可以作为httpHandle发布。
基数树(Radix Tree)又称为PAT位树(Patricia Trie or crit bit tree),是一种更节省空间的前缀树(Trie Tree)。对于基数树的每个节点,如果该节点是唯一的子树的话,就和父节点合并。
2.HTTP方法在Gin框架中对HTTP常见相关方法(GET、POST、PUT、DELETE、HEAD等)已经做了封装,直接调用就会快速注册相关路由,源码所在文件位置:github.com/gin-gonic/gin/routergroup.go
2.1 使用示例123456789101112131 ...