Gin
Gin入门
gin的学习要点
- 如何定义路由:包括参数路由、通配符路由
- 如何处理输入输出
- 如何使用middleware解决AOP问题
- 在 Gin 里面,用 Engine 来监听一个端口,是一个逻辑上的服务器。
- 一个 Go 进程可以创建多个 Engine。
- hello, world 使用步骤:
- 在应用中引入 Gin 依赖:go get github.com/gin-gonic/gin@latest
- 初始化一个 Engine
- 调用 Run 监听端口 8080,并且启动
gin.Engine
- 在gin里,一个web服务器被抽象成 Engine。
- 你可以在一个应用里面创建多个 Engine实例,监听不同的端口。
- Engine 承担了路由注册、接入 middleware 的核心职责。
gin.Context
- gin.Context 是 gin 里面的核心类型。应该说,你日常最经常的就是和它打交道。
- 它的字面意思就是“上下文”,在 Gin 里面,它的核心职责是:
- 处理请求
- 返回响应
- 下图中的 Request 代表的就是请求,Writer代表的就是响应。
gin 路由
- 静态路由:完全匹配的路由,也就是前面我们注册的 hello 的路由。
- 参数路由:在路径中带上了参数的路由。
- 通配符路由:任意匹配的路由。
gin面试题
- 什么是gin的middle?能用来解决什么问题?
- 什么是跨域问题,怎么解决?
- 跨域问题需要设置哪些头部?
在gin面试的时候,可以考虑提起自己研发了一个强大的gin插件库
Gorm
- Gorm是什么?Grom是一个 go 语言的 ORM 框架,性能优秀,简单易用
- Gorm功能:
- 支持多种数据库,包括 Mysql、PostgreSql。
- 支持简单查询,支持事务,也支持关联关系。
- 支持钩子
- 支持自动迁移工具。
Gorm快速入门
- 安装
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
- 快速入门
package mainimport ("gorm.io/gorm""gorm.io/driver/sqlite"
)type Product struct {gorm.ModelCode stringPrice uint
}func main() {db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})if err != nil {panic("failed to connect database")}// 迁移 schemadb.AutoMigrate(&Product{})// Createdb.Create(&Product{Code: "D42", Price: 100})// Readvar product Productdb.First(&product, 1) // 根据整型主键查找db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录// Update - 将 product 的 price 更新为 200db.Model(&product).Update("Price", 200)// Update - 更新多个字段db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})// Delete - 删除 productdb.Delete(&product, 1)
}
BCrypt加密
bcrypt 是一个号称最安全的加密算法。
优点:
- 不需要自己生成盐值
- 不需要额外存储盐值
- 可以通过控制 cost 来控制加密的性能
- 同样的文本,加密的结果不同
bcrypt限制密码长度不能超过72字节