migration AutoMigrateAutoMigrate 用于自动迁移您的 schema,保持您的 schema 是最新的。 注意: AutoMigrate 会创建表、缺失的外键、约束、列和索引。 It will change existing column’s type if its size, precision changed, or if it’s changing from non-nullable 2024-12-04 Go #Go
performance GORM 已经优化了许多东西来提高性能,其默认性能对大多数应用来说都够用了。但这里还是有一些关于如何为您的应用改进性能的方法。 禁用默认事务对于写操作(创建、更新、删除),为了确保数据的完整性,GORM 会将它们封装在一个事务里。但这会降低性能,你可以在初始化时禁用这种方式 123db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Conf 2024-12-04 Go #Go
prometheus GORM 提供了 Prometheus 插件来收集 DBStats 和用户自定义指标 https://github.com/go-gorm/prometheus 用法1234567891011121314151617181920import ( "gorm.io/gorm" "gorm.io/driver/sqlite" "gorm.io/plugin/prometheus")db, err 2024-12-04 Go #Go
scopes 作用域允许你复用通用的逻辑,这种共享逻辑需要定义为类型func(*gorm.DB) *gorm.DB。 查询Scope 查询示例: 1234567891011121314151617181920212223242526func AmountGreaterThan1000(db *gorm.DB) *gorm.DB { return db.Where("amount > ?", 1 2024-12-04 Go #Go
security GORM 使用 database/sql 的参数占位符来构造 SQL 语句,这可以自动转义参数,避免 SQL 注入数据 注意 Logger 打印的 SQL 并不像最终执行的 SQL 那样已经转义,复制和运行这些 SQL 时应当注意。 查询条件用户的输入只能作为参数,例如: 1234567userInput := "jinzhu;drop table users;"// 安全的,会被转义db.Whe 2024-12-04 Go #Go
serializer Serializer is an extensible interface that allows to customize how to serialize and deserialize data with database. GORM 提供了一些默认的序列化器:json、gob、unixtime,这里有一个如何使用它的快速示例 123456789101112131415type User s 2024-12-04 Go #Go
session GORM 提供了 Session 方法,这是一个 New Session Method,它允许创建带配置的新建会话模式: 1234567891011121314151617// Session 配置type Session struct { DryRun bool PrepareStmt bool NewDB 2024-12-04 Go #Go
settings GORM 提供了 Set, Get, InstanceSet, InstanceGet 方法来允许用户传值给 勾子 或其他方法 Gorm 中有一些特性用到了这种机制,如迁移表格时传递表格选项。 12// 创建表时添加表后缀db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}) Set 2024-12-04 Go #Go
sharding Sharding 是一个高性能的 Gorm 分表中间件。它基于 Conn 层做 SQL 拦截、AST 解析、分表路由、自增主键填充,带来的额外开销极小。对开发者友好、透明,使用上与普通 SQL、Gorm 查询无差别,只需要额外注意一下分表键条件。 为您提供高性能的数据库访问。 https://github.com/go-gorm/sharding 功能特点 非侵入式设计, 加载插件,指定配置,既可 2024-12-04 Go #Go
transactions 禁用默认事务为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升。 12345678910// 全局禁用db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ SkipDefaultTransaction: true, 2024-12-04 Go #Go
v2_release_note GORM 2.0 完全从零开始,引入了一些不兼容的 API 变更和许多改进 摘要 性能改进 代码模块化 Context,批量插入,预编译模式,DryRun 模式,Join 预加载,Find To Map,Create From Map,FindInBatches 支持 支持嵌套事务,SavePoint,Rollback To SavePoint SQL 生成器,命名参数,分组条件,Upsert, 2024-12-04 Go #Go
write_driver GORM offers built-in support for popular databases like SQLite, MySQL, Postgres, SQLServer, and ClickHouse. However, when you need to integrate GORM with databases that are not directly supported or h 2024-12-04 Go #Go
write_plugins CallbacksGORM leverages Callbacks to power its core functionalities. These callbacks provide hooks for various database operations like Create, Query, Update, Delete, Row, and Raw, allowing for extens 2024-12-04 Go #Go
Go 标准库之 fmt fmt 包实现了格式化 I/O,其功能类似于 C 的 printf 和 scanf。主要分为向外输出内容和获取输入内容两大部分https://pkg.go.dev/fmt 1、输出1.1、输出到控制台 fmt.Print 系列print 有三个相关的函数: 123456789func Print(a ...any) (n int, err error) { return F 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 json Go的标准包 encoding/json 实现了json对象的编码和解码。https://pkg.go.dev/json 1、介绍1.1、Go和JSON数据类型 JSON Go Boolean bool Number float64 String string Array []interface{} Object map[string]interface{} NU 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 os https://pkg.go.dev/os 1、介绍os包中提供了操作系统函数的接口,是一个比较重要的包。它的作用主要是在服务器上进行系统的基本操作,如文件操作、目录操作、执行命令、信号与中断、进程、系统状态等等。下面分模块归纳一些常用函数。 2、系统信息2.1、函数列表 函数 功能 Hostname() 获取当前主机名 Getpid() 返回调用者所在进程的进程ID G 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 os 文件操作 https://pkg.go.dev/os 1、介绍在Go语言中,文件操作的大多数函数都在os包里面,文件的信息包括文件名、文件大小、修改权限、修改时间等。 1.1、文件接口属性(FileInfo)12345678type FileInfo interface { Name() string // 文件名 Size() int64 // 文件大小 Mod 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 regexp https://pkg.go.dev/regexp 通过正则判断是否匹配regexp 包中含有三个函数用来判断是否匹配,如果匹配返回true,否则返回false 12345678910// Match 检查 b 中是否存在匹配 pattern 的子序列。更复杂的用法请使用Compile函数和Regexp对象。func Match(pattern string, b []byte) (mat 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 strconv 字符串转换 https://pkg.go.dev/strconv Go 不会对数据进行隐式的类型转换,只能手动去执行转换操作。 1、字符串转换成其他类型(Parse类函数)1.1、转换成整型(Atoi)语法 1func Atoi(s string) (int, error) 示例 12345s := "666"sInt,err := strconv.Atoi(s)if err == nil 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 time time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。 https://pkg.go.dev/time 1、时间中的类型1.1、时间time.Time 类型表示时间。我们可以通过 time.Now() 函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下: 12345678910111213func timeDemo() { now := ti 2024-12-03 Go > Go 标准库 #Go #Go 标准库