GORM-安装与配置

1. 安装 GORM

在开始使用 GORM 之前,需要先安装它的依赖。

安装 GORM 和驱动程序

以 MySQL 数据库为例,运行以下命令安装 GORM 和 MySQL 驱动:

1
2
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

其他数据库驱动:

  • PostgreSQL: go get -u gorm.io/driver/postgres
  • SQLite: go get -u gorm.io/driver/sqlite
  • SQL Server: go get -u gorm.io/driver/sqlserver

2. 连接数据库

示例:连接 MySQL 数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package main

import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)

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.Fatalf("Failed to connect to database: %v", err)
}

log.Println("Database connected successfully!")
}

注意事项

  • 替换 user, passworddbname 为实际值。
  • 参数 charset=utf8mb4 支持存储 Emoji 等特殊字符。
  • parseTime=True 允许解析时间字段。

3. 数据库连接池设置

GORM 使用 sql.DB 管理底层数据库连接,可以通过设置连接池优化性能。

示例:设置连接池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
"database/sql"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
"time"
)

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.Fatalf("Failed to connect to database: %v", err)
}

// 获取底层 *sql.DB 对象
sqlDB, err := db.DB()
if err != nil {
log.Fatalf("Failed to get sql.DB: %v", err)
}

// 设置连接池
sqlDB.SetMaxOpenConns(100) // 最大打开连接数
sqlDB.SetMaxIdleConns(10) // 最大空闲连接数
sqlDB.SetConnMaxLifetime(30 * time.Minute) // 连接的最大生命周期

log.Println("Database configured successfully!")
}

参数说明

  • SetMaxOpenConns:限制打开的连接数量,可以防止过多连接耗尽数据库资源。
  • SetMaxIdleConns:保持空闲连接的数量,减少频繁创建和销毁连接的开销。
  • SetConnMaxLifetime:控制连接的生命周期,防止长时间的连接被数据库服务器断开。

4. 数据库连接测试

为了确保配置正确,可以尝试执行一个简单的 SQL 查询:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package main

import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)

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.Fatalf("Failed to connect to database: %v", err)
}

// 测试连接
sqlDB, _ := db.DB()
if err := sqlDB.Ping(); err != nil {
log.Fatalf("Database ping failed: %v", err)
}

log.Println("Database ping successful!")
}

5. 总结

GORM 的安装和配置非常简单,但正确设置连接池可以显著提升性能和稳定性:

  • 安装所需的驱动程序,并配置连接字符串。
  • 使用 gorm.Config 进行全局配置。
  • 通过 sql.DB 对象设置连接池参数。