GORM v2 使用 Go Modules 管理依赖,安装过程很简单。但数据库驱动需要单独安装,这点和 v1 不一样。
在项目目录下执行:
go get -u gorm.io/gorm
这会安装 GORM v2 最新版本。go.mod 文件会自动添加依赖:
require gorm.io/gorm v1.25.0
GORM v2 把数据库驱动独立出来了,需要根据你的数据库类型单独安装:
go get -u gorm.io/driver/mysql
go get -u gorm.io/driver/postgres
go get -u gorm.io/driver/sqlite
go get -u gorm.io/driver/sqlserver
go get -u gorm.io/driver/tidb
安装完成后,创建一个最小可用的示例:
package main
import (
"fmt"
"log"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
ID uint
Name string
Age int
}
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("连接数据库失败:", err)
}
fmt.Println("连接成功")
// 自动迁移
db.AutoMigrate(&User{})
}
gorm.Config 提供了一些配置项:
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
SkipDefaultTransaction: true, // 跳过默认事务
PrepareStmt: true, // 预编译 SQL
DisableNestedTransaction: true, // 禁用嵌套事务
AllowGlobalUpdate: true, // 允许全局更新
})
SkipDefaultTransaction
默认情况下,GORM 会把每个写操作包在事务里。如果你确定不需要,可以关闭提升性能:
&gorm.Config{
SkipDefaultTransaction: true,
}
PrepareStmt
预编译 SQL 语句,对重复执行的查询有性能提升:
&gorm.Config{
PrepareStmt: true,
}
Logger
自定义日志输出:
import "gorm.io/gorm/logger"
&gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
}
GORM 内置了日志功能,可以显示执行的 SQL:
import (
"gorm.io/gorm/logger"
"log"
"os"
)
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second, // 慢查询阈值
LogLevel: logger.Info, // 日志级别
Colorful: true, // 彩色输出
},
)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
日志级别:
logger.Silent - 不输出logger.Error - 只输出错误logger.Warn - 警告和错误logger.Info - 所有 SQL生产环境建议设置为 logger.Warn 或 logger.Error。
如果你已经有 *sql.DB 对象,可以复用:
import (
"database/sql"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
sqlDB, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
// 复用 sql.DB
db, err := gorm.Open(mysql.New(mysql.Config{
Conn: sqlDB,
}), &gorm.Config{})
写个简单的测试确认安装成功:
package main
import (
"fmt"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
func main() {
// 使用 SQLite 内存数据库测试
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
if err != nil {
panic("连接失败")
}
// 获取底层的 sql.DB
sqlDB, _ := db.DB()
// 测试连接
err = sqlDB.Ping()
if err != nil {
panic("Ping 失败")
}
fmt.Println("GORM 安装成功!")
}
GORM 安装很简单,关键是记住:
gorm.io/gorm 核心库gorm.Config 进行配置