前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gorm源码1 目录分析

gorm源码1 目录分析

作者头像
平凡的学生族
发布2019-12-24 15:41:37
1.1K0
发布2019-12-24 15:41:37
举报
文章被收录于专栏:后端技术

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 放了很多工具函数
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档