Loading

gin, gorm快速入门

Gin

Gin入门

gin的学习要点

  • 如何定义路由:包括参数路由、通配符路由
  • 如何处理输入输出
  • 如何使用middleware解决AOP问题

image-20241124165732049

  • 在 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代表的就是响应。

image-20241124170351891

gin 路由

  • 静态路由:完全匹配的路由,也就是前面我们注册的 hello 的路由。
  • 参数路由:在路径中带上了参数的路由。
  • 通配符路由:任意匹配的路由。

image-20241124170458363

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字节

posted @ 2024-11-29 22:44  cp-qwq  阅读(122)  评论(0)    收藏  举报