Gin
type
status
date
slug
summary
tags
category
icon
password
终于来哩!
Gin 是一个 Go (Golang) 编写的轻量级 http web
框架
Gin 的官网:https://gin-gonic.com/zh-cn/
Gin Github 地址:https://github.com/gin-gonic/gin
环境搭建
- 下载&安装
在项目目录下面执行
- 将 gin 引入到代码中
- 新建Main.go
- Gin,启动!
golang 程序的热加载
所谓热加载就是当我们对代码进行修改时,程序能够自动重新加载并执行,这在我们开发中是非常便利的,可以快速进行代码测试,省去了每次手动重新编译
工具
1(推荐):https://github.com/gravityblast/fresh
工具 2:https://github.com/codegangsta/gin
Gin 框架中的路由
GET(SELECT) | 从服务器取出资源(一项或多项) |
POST(CREATE) | 在服务器新建一个资源 |
PUT(UPDATE) | 在服务器更新资源(客户端提供改变后的完整资源) |
DELETE(DELETE) | 从服务器删除资源 |
c.String() c.JSON() c.JSONP() c.HTML()
GET POST PUT
例子
Gin HTML 模板渲染
模板放在不同目录里面的配置方法
Gin 框架中如果不同目录下面有同名模板的话我们需要给模版起别名
在main.go中这样写
gin 模板基本语法
{{.}} 输出数据
例子
其中user结构体定义如下
注释
可以多行,不能嵌套
变量
移除空格
”-“要紧挨着“{{“和“}}”
比较函数
符号 | 含义 |
eq | 如果 arg1 == arg2 则返回真 |
ne | 如果 arg1 != arg2 则返回真 |
lt | 如果 arg1 < arg2 则返回真 |
le | 如果 arg1 <= arg2 则返回真 |
gt | 如果 arg1 > arg2 则返回真 |
ge | 如果 arg1 >= arg2 则返回真 |
条件判断
例子
range
例子
with
预定义函数
执行模板时,函数从两个函数字典中查找:首先是模板函数字典,然后是全局函数字典。一
般不在模板内定义函数,而是使用 Funcs 方法添加函数到模板里。
预定义的全局函数如下:
名称 | 功能 |
and | 函数返回它的第一个 empty 参数或者最后一个参数; 就是说”and x
y”等价于”if x then y else x”;所有参数都会执行; |
or | 返回第一个非 empty 参数或者最后一个参数; 亦即”or x y”等价于”if x
then x else y”;所有参数都会执行; |
not | 返回它的单个参数的布尔值的否定 |
len | 返回它的参数的整数类型长度 |
index | 执行结果为第一个参数以剩下的参数为索引/键指向的值; 如”index x 1 2
3”返回 x[1][2][3]的值;每个被索引的主体必须是数组、切片或者字典。 |
print | 即 fmt.Sprint |
printf | 即 fmt.Sprintf |
println | 即 fmt.Sprintln |
html | 返回与其参数的文本表示形式等效的转义 HTML。 这个函数在 html/template
中不可用。 |
urlquery | 以适合嵌入到网址查询中的形式返回其参数的文本表示的转义值。
这个函数在 html/template 中不可用。 |
js | 返回与其参数的文本表示形式等效的转义 JavaScript。 |
call | 执行结果是调用第一个参数的返回值,该参数必须是函数类型,其余参数作为调用该函
数的参数; 如”call .X.Y 1 2”等价于 go 语言里的 dot.X.Y(1, 2); 其中 Y
是函数类型的字段或者字典的值,或者其他类似情况; call
的第一个参数的执行结果必须是函数类型的值(和预定义函数如 print
明显不同); 该函数类型值必须有 1 到 2 个返回值,如果有 2
个则后一个必须是 error 接口类型; 如果有 2 个返回值的方法返回的 error 非
nil,模板执行会中断并返回给调用模板执行者 该错误; |
自定义模板函数
main.go中:
在
LoadHTMLGlob
之前SetFuncMap
,添加自定义的模版函数SetFuncMap
就是设置了一个Map实现函数
模版中:
调用函数
函数名 参数1 参数2……
嵌套 template
新建public/header.html
在其他模版内引入
注意加上最后的“.”
静态文件服务
当我们渲染的 HTML 文件中引用了静态文件时,我们需要配置静态 web
服务
r.Static(“/static”, “./static”) 前面的/static 表示路由 后面的./static
表示路径
若css放在/static/css下,则在html中这样引入
路由详解
GET POST 以及获取 Get Post 传值
Get 请求传值
此时的GET请求应该如下:
Post 请求传值 获取 form 表单数据
前台:
后台:
获取 GET POST 传递的数据绑定到结构体
定义结构体,添加form标签
json标签的作用是解析的时候把json字段名改成小写
GET
声明为结构体
传的时候用它的指针!!!
别他妈写出什么user:=&UserInfo{}然后传&user了,你传牛魔呢
或者干脆用user:=new(UserInfo)
直接传user
浪费老子一个早上看你那💩代码
POST
获取 Post Xml 数据
动态路由
路由分组
在同文件下分组
拆分到不同文件
新建 routes 文件夹,routes 文件下面新建
adminRoutes.go、apiRoutes.go、defaultRoutes.go
在main.go中,导入routers包
然后在各自的xxx.go下配置路由即可
Gin 中自定义控制器
新建controllers文件夹,在其下建立对应的控制器,以admin为例
新建admin文件夹,在其中建立userController.go
之所以建立结构体是为了方便继承
然后在对应的router中使用即可
继承
新建 controller/admin/BaseController.go
可以让 UserController继承BaseController
然后直接调用BaseController的方法
Gin 中间件
next
先跳转到后面的剩余处理程序,再回来继续执行
Abort
终止调用请求的剩余处理程序
一个路由可以添加多个中间件
全局中间件
在main函数中添加:
分组路由中间件
法1:
法2:
中间件传值
Model
就是把一个常用的功能,放到一个模块里,中间件/控制器/main都可以使用该功能。
例如把时间转换放到一个model里。
文件上传
html模版:
Controller:
按日期存储文件
- 获取上传文件
- 判断后缀是否合法
- 创建保存目录
- 生成文件名和保存的目录
- 执行上传
Cookie
SetCookie
第一个参数 key
第二个参数 value
第三个参数 过期时间.如果只想设置 Cookie
的保存路径而不想设置存活时间,可以在第三个参数中传递 nil
第四个参数 cookie 的路径
第五个参数 cookie 的路径 Domain 作用域 本地调试配置成 localhost ,
正式上线配置成域名
第六个参数是 secure ,当 secure 值为 true 时,cookie 在 HTTP
中是无效,在 HTTPS 中才有效
第七个参数 httpOnly,是微软对 COOKIE 做的扩展。如果在 COOKIE
中设置了“httpOnly”属性,
则通过程序(JS 脚本、applet 等)将无法读取到 COOKIE 信息,防止 XSS
攻击产生
Cookie(获取)
Session
session 是另一种记录客户状态的机制,不同的是 Cookie
保存在客户端浏览器中,而
session保存在服务器上。当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个
session 对象,生成一个类似于 key,value 的键值对,然后将 value
保存到服务器 将 key(cookie)返回到浏览器(客户)端。浏览器下次访问时会携带
key(cookie),找到对应的 session(value)。
Gorm
gorm.model
可以用继承加入到自己的结构体中,也可以不加入
默认用ID作为主键
tag
结构体标记(Tag) | 描述 |
Column | 指定列名 |
Type | 指定列数据类型 |
Size | 指定列大小, 默认值255 |
PRIMARY_KEY | 将列指定为主键 |
UNIQUE | 将列指定为唯一 |
DEFAULT | 指定列默认值 |
PRECISION | 指定列精度 |
NOT NULL | 将列指定为非 NULL |
AUTO_INCREMENT | 指定列是否为自增类型 |
INDEX | 创建具有或不带名称的索引,
如果多个索引同名则创建复合索引 |
UNIQUE_INDEX | 和 INDEX
类似,只不过创建的是唯一索引 |
EMBEDDED | 将结构设置为嵌入 |
EMBEDDED_PREFIX | 设置嵌入结构的前缀 |
- | 忽略此字段 |
结构体标记(Tag) | 描述 |
MANY2MANY | 指定连接表 |
FOREIGNKEY | 设置外键 |
ASSOCIATION_FOREIGNKEY | 设置关联外键 |
POLYMORPHIC | 指定多态类型 |
POLYMORPHIC_VALUE | 指定多态值 |
JOINTABLE_FOREIGNKEY | 指定连接表的外键 |
ASSOCIATION_JOINTABLE_FOREIGNKEY | 指定连接表的关联外键 |
SAVE_ASSOCIATIONS | 是否自动完成 save 的相关操作 |
ASSOCIATION_AUTOUPDATE | 是否自动完成 update 的相关操作 |
ASSOCIATION_AUTOCREATE | 是否自动完成 create 的相关操作 |
ASSOCIATION_SAVE_REFERENCE | 是否自动完成引用的 save 的相关操作 |
PRELOAD | 是否自动完成预加载的相关操作 |
表名
列名
- Waline
Last update: 2024-02-24
type
status
date
slug
summary
tags
category
icon
password
使用Notion全新构建!欢迎访问
关注taffy喵~谢谢喵~