【Golang】Gin框架使用

272 阅读4分钟
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 25 天,点击查看活动详情
【地震高岗,一派西山千古秀】
Gin介绍

Gin 是一个 Go (Golang) 编写的轻量级 http web 框架,运行速度非常快,如果你是性能和高效的追求者 Gin 最擅长的就是 Api 接口的高并发,如果项目的规模不大,业务相对简单,这个时候我们也推荐您使用。

Gin 的官网:gin-gonic.com/zh-cn/

Github 地址:github.com/gin-gonic/g…

安装gin

框架文档介绍:go get -u github.com/gin-gonic/gin

这时候如果遇到问题资源加载不了,解决方法是使用代理(这块有个 go env 的命令,可以查看当前配置),在cmd中运行

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

//创建一个服务 ginServer := gin.Default()

//响应页面给前端
ginServer.GET("/index", func(context *gin.Context) {
	//context.JSON()返回json数据
	context.HTML(200, "index.html", gin.H{
		"msg": "这是go后台传来的",
	})
})

//服务器端口 ginServer.Run(":8082")

favicon

ginServer.Use(favicon.New("./1.png"))

Gin RestFul
//访问地址,处理我们的请求  Request  Response
//接收这个请求有一个返回值,我们通过匿名函数func(){}来返回 context上下文接收请求或响应一些数据
ginServer.GET("/hello", func(context *gin.Context) {
	context.JSON(200, gin.H{"msg": "hello,world"})
})

ginServer.POST("/user", func(context *gin.Context) {
	context.JSON(200, gin.H{"msg": "hello,world"})
})
ginServer.PUT("/user", func(context *gin.Context) {
	
})
ginServer.DELETE("/user", func(context *gin.Context) {

})
    
    
Gin 中的Cookie
  • HTTP 是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页 面,服务器无法认识到这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何 关系的。如果我们要实现多个页面之间共享数据的话我们就可以使用Cookie 或者Session 实 现 cookie 是存储于访问者计算机的浏览器中。可以让我们用同一个浏览器访问同一个域名 的时候共享数
  • Cookie 能实现的功能
  1. 保持用户登录状态
  2. 保存用户浏览的历史记录
  3. 猜你喜欢,智能推荐
  4. 电商网站的加入购物车
  • 设置和获取Cookie 前面我们已经使用过ctx.Set("username") 和 ctx.Get("username")来进行数据的保存和共享,但这个使用的只针对是单页面的数据共享,要想实现多页面的共享,就需要Cookie或者Session gin-gonic.com/zh-cn/docs/…
  • 设置Cookie c.SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool) 其中:
  1. 第一个参数key
  2. 第二个参数value
  3. 第三个参数过期时间.如果只想设置Cookie 的保存路径而不想设置存活时间,可以在第三个参数中传递nil
  4. 第四个参数cookie 的路径
  5. 第五个参数cookie 的路径Domain 作用域本地调试配置成localhost , 正式上线配置成域名
  6. 第六个参数是secure ,当secure 值为true 时,cookie 在HTTP 中是无效,在HTTPS 中才有效
  7. 第七个参数httpOnly,是微软对COOKIE 做的扩展。如果在COOKIE 中设置了“httpOnly”属性,则通过程序(JS 脚本、applet 等)将无法读取到COOKIE 信息,防止XSS 攻击产生
  • 获取Cookie cookie, err := c.Cookie("name")
  • 删除Cookie:把第三个参数时间设置为-1

多个二级域名共享cookie 我们想的是用户在a.test.com 中设置Cookie 信息后在b.test.com 中获取刚才设置的cookie,也就是实现多个二级域名共享cookie, 这时候的话我们就可以这样设置cookie c.SetCookie("usrename", "张三", 3600, "/", ".test.com", false, true)

Gin 中使用GORM 操作mysql 数据库
  • GORM 简单介绍 GORM 是Golang 的一个orm 框架。简单说,ORM 就是通过实例对象的语法,完成关系型 数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。使用ORM 框架可以让我们更方便的操作数据库。 GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQL Server
  • Gorm 特性 全功能ORM 关联(Has One,Has Many,Belongs To,Many To Many,多态,单表继承) Create,Save,Update,Delete,Find 中钩子方法 支持Preload、Joins 的预加载 事务,嵌套事务,Save Point,Rollback To Saved Point Context、预编译模式、DryRun 模式 批量插入,FindInBatches,Find/Create with Map,使用SQL 表达式、Context Valuer 进 行CRUD SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询 复合主键,索引,约束 Auto Migration 自定义Logger 灵活的可扩展插件API:Database Resolver(多数据库,读写分离)、Prometheus
  • 官方文档:gorm.io/zh_CN/docs/…
【门朝大海,三河合水万年流】