Go语言基础框架三件套|青训营笔记

79 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第4天。

本节课程介绍了Go框架三件套:Gorm,Kitex,Hertz。 Gorm是一个Go语言写的ORM框架,Kitex是字节内部的RPC框架,Hertz也是字节内部的HTTP框架,三者都在字节内部有广泛的应用。

三件套使用

具体详细操作可参考文档

Gorm的基本使用

  • Gorm使用名为ID的字段作为主键
  • 使用结构体的 蛇形负数作为表名
  • 字段名的蛇形作为列名
  • 结构体定义gorm model,提供TableName() string接口,返回表名

连接数据库

注意处理错误

 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
 db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
复制代码

创建数据

db.Create(&Product{Code: "D42",Price: 100})
products:=[]*product{{Code:"D41"},{Code:"D42"},{Code:"D43"}}
res:=db.Create(products)
复制代码
  • 创建一条数据传对象
  • 创建多条数据传切片
  • 使用clause.OnConflict处理数据冲突
  • 使用default标签为字段定义默认值

查询数据

查询单条数据

var product Product
db.First(&product,1)//根据整型主键查找
db.First(&product,"code=?","D42")//查找code字段值为D42的记录
复制代码

查询多条数据

result:=db.Where("age>10").Find(&users)
fmt.Println(result.RowsAffected)//记录数
db.Where("name IN ?",[]string{"jinzhu","jinzhu 2"}).Find(&users)
db.Where("name LIKE ?",%jin%).Find(&users)
db.Where("name = ? AND age>=?","jinzhu","22").Find(&users)
db.Where(&User{Name:"jinzhu",Age:0}).Find(&users)
db.Where(map[string]interface{}{"Name":"jinzhu","Age":0}).Find(&users)
复制代码
  • 使用First时,需要注意查询不到数据会返回ErrRecordNotFound
  • 使用Find查询多条数据,查询不到数据不会返回错误
  • 使用结构体作为查询条件时,GORM只会查询非零值字段,这意味着如果字段值为0、false,该字段不会被用于构建查询条件,使用Map来构建查询条件

更新数据

更新时需要指定条件,当使用Model方法,且该对象主键有值,则该值会被用于构建条件如下:

db.Model(&product).Update("Price",200)//product为2.1.3查找到的记录
//更新多个字段
db.Model(&product).Updates(Product{Price:200,Code:"F42"})//仅支持更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"Price":200,"Code":"F42"})
复制代码

反之则需指定条件

db.Model(&product{}).Where("Price = ?", 100).Update("Code", "F42")
复制代码
  • 更新表达式:gorm.Expr()

删除数据

类似查询

db.First(&product,1)//根据整型主键查找
db.First(&product,"code=?","D42")//查找code字段值为D42的记录
复制代码

GORM事务

Gorm提供了Begin、Commit、Rollback方法用于使用事务

Kitex生成代码

  • 注意上一步定义IDL
  • go mod edit -replace=github.com/apache/thrift=github.com/apache/thrift@v0.13.0初始化模块
  • 使用kitex-module example -service example echo.thrift命令生成代码

github.com/kitex-contr…

小结

本节课学习到了Hertz、Kitex这些功能强大,使用方便的框架的基本使用。课后自己再从别的地方学习一下