GO框架三件套详解|青训营笔记

85 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天,今天的课程是介绍Go框架三件套以及其使用方法。

一、Gorm

简介:

Gorm是一个已经迭代了10多年的ORM框架,拥有丰富的开源拓展并在字节内部广泛使用。

基本使用

定义gorm model:

type Product struct{
    Dode string
    Price uint
}

为model定义表名:

func (p Product) TableName() string{
    return "product"
}    

定义完成之后可以使用gorm的函数gorm.Open()进行数据库的连接,具体连接哪个数据库可以自己定义,比如想要使用mysql的数据库:mysql.Open(dsn)里面写上具体的数据库配置即可。dsn为data-source-name的缩写,表示数据源名称。

GORM目前支持MySql、SQLServer、PostgreSQL、SQLite.

想要查询数据可以调用First函数,使用First时,需要注意查询不到数据会返回ErrRecordNotFound,并且每次返回第一条数据,按照主键排序。

使用Find查询多条数据,查询不到数据不会返回错误,而是空值。

查询时不仅可以使用字符串,也可以使用结构体作为查询条件,GROM只会查询结构体中非零值的字段,要想查询零值,可以使用Map来作为查询条件。同样的,使用结构体进行更新时,也只会更新非零字段。

GORM中不同的删除操作是物理删除,GORM提供了gorm.DeletedAt用来实现软删,需要在结构体中增加Deleted字段,此时再进行删除就是软删。实现软删的方式为将Deleted置为当前时间,并且在查询时过滤掉有时间的数据,使用Unscoped可以查询到被软删的数据。

GORM也提供了Begin、Commit、Rollback方法用于使用事务,在需要使用事务的地方,开启事务:tx:=db.Begin(),开启完成之后使用tx对数据库进行操作,当sql执行失败时,调用Rollbacl进行回滚,所有都执行完成后使用Commit进行提交,GORM还提供了Tansaction方法用于自动提交事务。