From c50ca479117151178c0205a930538166b3f85d83 Mon Sep 17 00:00:00 2001 From: lixiangwuxian Date: Sat, 5 Jul 2025 16:58:04 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8=20sync.Once=20=E7=A1=AE=E4=BF=9D=20?= =?UTF-8?q?GormDB=20=E5=8F=AA=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8Ddb=E6=9F=A5=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 1 - sqlite3/gorm.go | 15 +++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/main.go b/main.go index 5e4d14d..77d23aa 100644 --- a/main.go +++ b/main.go @@ -55,7 +55,6 @@ func main() { }() defer exec.DockerContainer.RemoveContainer() defer sqlite3.CloseDB() - sqlite3.InitGormDB() go func() { const reconnectDelay = 5 * time.Second for !stopRun { diff --git a/sqlite3/gorm.go b/sqlite3/gorm.go index 3ba3e23..279a9e5 100644 --- a/sqlite3/gorm.go +++ b/sqlite3/gorm.go @@ -1,12 +1,16 @@ package sqlite3 import ( + "sync" + "gorm.io/driver/sqlite" "gorm.io/gorm" ) var db *gorm.DB +var OnceInitGormDB sync.Once + func InitGormDB() { var err error db, err = gorm.Open(sqlite.Open("data.db"), &gorm.Config{}) @@ -16,27 +20,30 @@ func InitGormDB() { } func GetGormDB() *gorm.DB { + if db == nil { + OnceInitGormDB.Do(InitGormDB) + } return db } // TryCreateTable 使用GORM执行原始SQL创建表语句 func TryCreateTable(query string) error { - return db.Exec(query).Error + return GetGormDB().Exec(query).Error } // AutoMigrate 使用GORM的自动迁移功能 func AutoMigrate(models ...interface{}) error { - return db.AutoMigrate(models...) + return GetGormDB().AutoMigrate(models...) } // GetGormTx 获取GORM事务 func GetGormTx() *gorm.DB { - return db.Begin() + return GetGormDB().Begin() } // CloseDB 关闭数据库连接 func CloseDB() { - if sqlDB, err := db.DB(); err == nil { + if sqlDB, err := GetGormDB().DB(); err == nil { sqlDB.Close() } }