gin, gorm快速入门
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 main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 迁移 schema
db.AutoMigrate(&Product{})
// Create
db.Create(&Product{Code: "D42", Price: 100})
// Read
var product Product
db.First(&product, 1) // 根据整型主键查找
db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录
// Update - 将 product 的 price 更新为 200
db.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 - 删除 product
db.Delete(&product, 1)
}
BCrypt加密
bcrypt 是一个号称最安全的加密算法。
优点:
- 不需要自己生成盐值
- 不需要额外存储盐值
- 可以通过控制 cost 来控制加密的性能
- 同样的文本,加密的结果不同
bcrypt限制密码长度不能超过72字节


从本文开始记录c++败犬转go的学习过程,一起加油把!
浙公网安备 33010602011771号