- Gin官网中文文档:Gin Web Framework
- Gin Github:gin-gonic/gin
准备工作
- 创建工程参考之前的Go 学习笔记 01-Go 项目的创建与运行文章
- 创建完成后,导入
gin包:github.com/gin-gonic/gin - 运行下面这段代码
|
|
在浏览器中访问127.0.0.1:8080/test,可以看到浏览器显示hello gin即准备工作完成

四种请求的使用

|
|
模型绑定和验证

- 先创建一个结构体,然后把客户端传来的参数通过绑定的形式直接映射到结构体实例上
- 模型绑定和验证 | Gin Web Framework
- 可以给字段指定特定规则的修饰符,如果一个字段用
binding:"required"修饰,并且在绑定时该字段的值为空,那么将返回一个错误。
|
|
请求响应结果:
文件上传和返回

- 注意:前端上传文件时需要在请求头
Headers设置Content-Type为multipart/from-data,Body选择from-data
单文件
上传文件到服务器,服务器将接收到的文件先保存到本地然后直接返回接收到的文件信息(不是文件本身):
|
|
请求响应结果:
上传文件到服务器,服务器将接收到的文件先保存到本地再将保存到本地的文件返回:
|
|
请求响应结果:
多文件
|
|
路由分组和中间件

- 路由分组:同一组的路由前缀相同
|
|
- 路由分组+中间件:洋葱模型
|
|
访问/v1/test后,控制台打印:

注意:当在中间件或handler中启动新的goroutine时,不能使用原始的上下文c *gin.Context, 必须使用其只读副本c.Copy()
日志和日志格式

- Gin自带日志:
- 写日志文件 · Gin中文文档
- 自定义日志格式 · Gin中文文档
- 缺点:灵活度不够,自定义比较麻烦
- 第三方日志工具
- go-logging
- logrus
初识GORM
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。ORM框架是连接数据库的桥梁,只要提供了持久化类与表的映射关系,ORM框架在运行时就能参照映射文件的信息,把对象持久化到数据库中。


连接数据库
- 导入驱动程序和gorm包
- 打开
Navicat或mysql,新建一个数据库 - 填入数据库名、用户名和密码等信息后连接数据库
|
|
自动化创建数据库表
- 创建结构体
- 使用
AutoMigrate方法,若表不存在则自动创建
|
|
基本的增删改查
|
|
- 查
|
|
- 改
|
|
- 删
|
|
gorm结构体创建技巧和结合gin使用
gorm结构体创建技巧
tag设置
工作中常用的:
|
|
自定义表名
|
|
关联
|
|
运行结果:

填充数据:
|
|
结合gin使用
从前端获取数据后写入数据库中:
|
|
前端构造的json数据:
|
|
从前端发送GET请求查询数据:
- 涉及一对多、多对多时,要使用
preload()预加载 - 预加载可以嵌套
|
|
查询到的结果:
gorm更多内容:bilibili
JWT-GO
创建JWT
|
|
解析JWT
|
|
Casbin模型
Casbin基础模型
PERM元模型
- Policy策略、Effect影响、Request请求、Matchers匹配规则
- 定义一个策略
P和匹配规则M,通过请求R过来的参数,与策略P通过规则M进行匹配,获取一个影响E,拿到影响E的结果进到影响E的表达式,返回一个布尔值
Policy策略
|
|
- sub(subject,访问实体)、obj(obj,访问资源)、act(action,访问方法)、eft(策略结果,一般为空,默认指定allow,还可以定义为deny)
- 策略一般存储到数据库,因为数量很多
|
|
Request请求
|
|
Matchers匹配规则
|
|
Matchers是Request和Policy的匹配规则- 会把
r和p按照上述描述进行匹配,从而返回匹配结果(eft),如果不定义,会返回allow,如果定义过了,会返回我们定义过的那个结果
Effect影响
|
|
- 决定是否可以放行
- 这里的规则是定死的,不是自定义的
role_definition角色域
role_definition角色域:用来存储用户的角色
|
|
- 表示以角色为基础
- 用户是那个角色
|
|
- 表示以域为基础(多商户模式)
- 用户是那个角色属于那个商户(域)
Casbin使用
本地文件模式
main.go:
|
|
model.conf:
|
|
policy.csv:
|
|
使用数据库存储policy
main.go:
|
|
model.conf同上
提前建一个数据库casbin,casbin会自动建一个表casbin_rule

对policy增删改查
|
|
增:
|
|
model.conf中添加role_definition,修改role_definition:
|
|
删:
改:
自定义比较函数
main.go:
|
|
model.conf:
|
|