Gin集成(五):集成Redis操作库

1.介绍

redis官网推荐使用redigo(https://github.com/gomodule/redigo),截止到今天Github Start是8.2k 但go-redis(https://github.com/go-redis/redis)使用的人更多, 并且go-redis封装得更好。截止到今天Github Start 是12.1k。

Gin集成(四):集成JWT

1. 介绍

JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。

Gin集成(二):集成高性能日志zap

1.项目介绍

Gin框架学习使用,并实践常用包在Gin框架中的集成和使用。源码地址: https://github.com/shershon1991/gin-api-template.git

1.1 项目结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
├── api # 接口
├── config # 配置
├── core # 核心代码
├── global # 全局变量和常量
├── initialize # 初始化相关
├── logs # 日志目录
├── main.go # 启动文件
├── model # 实体
├── router # 路由
    └── middleware #中间件
├── test # 单元测试目录
└── utils # 工具包

1.2 集成流程

集成代码流程

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

Gin框架(十二):更多HTTP服务使用

1.静态文件服务

1.1 代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package main
import "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 请求示例

1
2
3
4
5
# 请求图片
http://127.0.0.1:8080/img/b.jpg
http://127.0.0.1:8080/img/c.jpg
# 请求文件
http://127.0.0.1:8080/favicon.ico

2.重定向

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func main() {
	engine := gin.Default()
	// 重定向到外部(百度)
	engine.GET("/baidu", func(context *gin.Context) {
		context.Redirect(http.StatusMovedPermanently,"http://www.baidu.com")
	})
	// 路由重定向(第一种)
	engine.GET("/route", func(context *gin.Context) {
		context.Request.URL.Path = "/baidu"
		engine.HandleContext(context)
	})

	// 路由重定向(第二种)
	engine.GET("/pos", func(context *gin.Context) {
		context.Redirect(http.StatusTemporaryRedirect,"/get")
	})
	engine.GET("/get", func(context *gin.Context) {
		context.JSON(http.StatusOK,gin.H{"msg":"success"})
	})
	// 启动服务
	_ = engine.Run()
}

3.修改HTTP配置

3.1 默认启动HTTP服务

1
2
3
4
5
6
7
8
9
func main() {
	engine := gin.Default()
	// 注册路由
	engine.GET("/", func(context *gin.Context) {
		// todo
	})
	// 启动服务
	_ = engine.Run()
}

3.2 启动自定义HTTP服务

可以直接使用 http.ListenAndServe()启动服务,具体配置如下:

Gin框架(十一):验证器(validator)

1.介绍

validator是一个开源的验证器包,可以快速校验输入信息是否符合自定规则。目前Star 7.8k,源码地址: https://github.com/go-playground/validator

1.1 安装

1
go get github.com/go-playground/validator

1.2 引用

1
import "github.com/go-playground/validator"

1.3 示例

代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/go-playground/validator/v10"
)
// 定义一个添加用户参数结构体
type AddUserPost struct {
	Name  string `json:"name" validate:"required"`        //必填
	Email string `json:"email" validate:"required,email"` // 必填,并且格式是email
	Age   uint8    `json:"age" validate:"gte=18,lte=30"` // 年龄范围
}
// 简单示例
func main() {
	engine := gin.Default()
	engine.POST("/valid", func(context *gin.Context) {
		var adduserPost  AddUserPost
		// 接收参数
		err := context.ShouldBindJSON(&adduserPost)
		if err != nil {
			context.JSON(500,gin.H{"msg":err})
			return
		}
		fmt.Printf("adduserPost: %+v\n",adduserPost)
		// 使用Validate验证
		validate := validator.New()
		err = validate.Struct(adduserPost)
		if err != nil {
			fmt.Println(err)
			context.JSON(500,gin.H{"msg":err.Error()})
			return
		}
		context.JSON(200,gin.H{"msg":"success"})
	})
	_ = engine.Run()
}

请求:

Gin框架(九):BasicAuth中间件使用

1.什么是BasicAuth?

Basic Auth是一种开放平台认证方式,简单的说就是需要你输入用户名和密码才能继续访问。

2.在单路由中使用

​ 如果需要针对单个路由使用,要在单路由中注册BasicAuth中间件即可。