在 Go 语言中,init
函数是一个特殊的函数,它在程序启动时自动执行,用于初始化包级变量和执行一次性的设置。init
函数是自动执行的,不需要在代码中显式调用。本文将介绍 init
函数的作用,并以 GORM 数据库连接为例,展示如何在实际项目中使用 init
函数。
init 函数简介
每个包可以拥有多个 init
函数,它们在程序启动时按文件顺序执行。init
函数没有参数,也没有返回值。它们通常用于以下目的:
- 初始化包级变量。
- 建立数据库连接。
- 执行必要的设置或配置。
- 执行一次性的资源分配。
使用 init 函数建立 GORM 数据库连接
以 GORM 为例,我们可以在 init
函数中建立数据库连接,并将其存储在包级变量中,以便在程序的其他地方使用。
定义数据库连接
首先,我们定义一个包级变量 DB
用于存储数据库连接:
go
var DB *gorm.DB
初始化数据库连接
接下来,在 init
函数中,我们使用 GORM 建立数据库连接:
go
func init() {
// 数据库配置信息
username := "root"
password := "12345678"
host := "127.0.0.1"
port := 3306
dbname := "gorm"
timeout := "10s"
// 创建数据源名称(DSN)
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, dbname, timeout)
// 配置 GORM
config := &gorm.Config{
SkipDefaultTransaction: true,
NamingStrategy: schema.NamingStrategy{
TablePrefix: "f_", // 表名前缀
SingularTable: true, // 单数表名
NoLowerCase: false, // 关闭大小写转换
},
}
// 打开数据库连接
db, err := gorm.Open(mysql.Open(dsn), config)
if err != nil {
panic("连接数据库失败,error=" + err.Error())
}
// 打印数据库连接状态
fmt.Printf("数据库连接状态: %v\n", db)
// 将数据库连接赋值给包级变量
DB = db
}
使用数据库连接
在 main
函数或其他函数中,我们可以直接使用 DB
变量进行数据库操作:
go
func main() {
// 使用 Debug 模式自动迁移 Student 表
DB.Debug().AutoMigrate(&Student{})
}
结语
通过使用 init
函数,我们可以在程序启动时自动执行必要的初始化操作,如建立数据库连接。这种方式有助于保持代码的整洁和组织性,同时确保了初始化逻辑的执行。GORM 的 AutoMigrate
方法进一步简化了数据库迁移的过程,使得开发更加高效。