美文网首页
gorm源码1 目录分析

gorm源码1 目录分析

作者: 不存在的里皮 | 来源:发表于2019-12-23 00:38 被阅读0次

    gorm目录文件如下:



    主要文件是callback main scope search field dialect(.go)这几个文件

    • callback.go type Callback struct包含所有CRUD的回调函数, DefaultCallback是gorm框架用的回调变量
    • association.go type Association struct包含很多与关系相关的帮助函数. 如Association::Find, Association::Append
      • 具体用法见gorm教程的"关联"部分
    • dialect.go type Dialect interface包含一些数据库相关的操作, 不同的数据库(mysql, sqlite, postgress)的具体实现不同
    • error.go 用var定义了一些error
      var (
        // ErrRecordNotFound returns a "record not found error". Occurs only when attempting to query the database with a struct; querying with a slice won't return this error
        ErrRecordNotFound = errors.New("record not found")
        ...
       )
      
      另外定义了type Errors []error, 且实现了Error接口,让其可以像Error一样使用.
    • field.go type Field struct
      // Field model field definition
      type Field struct {
         *StructField
         IsBlank bool
         Field   reflect.Value
      }
      
    • interface.go 定义了SQLCommon, sqlDb, sqlTx三个接口
    • logger.go 最关键定义了type Logger struct:
      func (logger Logger) Print(values ...interface{}) {
         logger.Println(LogFormatter(values...)...)
      }
      
    • main.go 主要定义了DB
    • model.go 主要定义了type Model struct:
      // Model base model definition, including fields `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`, which could be embedded in your models
      //    type User struct {
      //      gorm.Model
      //    }
      type Model struct {
           ID        uint `gorm:"primary_key"`
           CreatedAt time.Time
           UpdatedAt time.Time
           DeletedAt *time.Time `sql:"index"`
      }
      
    • model_struct.go 定义了ModelStruct, StructField, Relationship三个struct, 并为Scope定义了两个成员函数(为何要在这定义). 你在实体struct中编写tag后,就会被解析到这三个类中.
    • naming.go 定义了Namer函数和NamingStrategy结构体,NamingStrategy定义了数据库、表、列的命名方式(都是驼峰转下划线)
      // Namer is a function type which is given a string and return a string
      type Namer func(string) string
      
      // NamingStrategy represents naming strategies
      type NamingStrategy struct {
           DB     Namer
           Table  Namer
           Column Namer
      }
      // TheNamingStrategy is being initialized with defaultNamingStrategy
      var TheNamingStrategy = &NamingStrategy{
         DB:     defaultNamer,
         Table:  defaultNamer,
         Column: defaultNamer,
      }
      
    • scope.go type Scope struct包含了当前你要操作的各种操作
    • search.go 包含了搜索条件
    • utils.go 放了很多工具函数

    相关文章

      网友评论

          本文标题:gorm源码1 目录分析

          本文链接:https://www.haomeiwen.com/subject/spwnnctx.html