package cache import ( "database/sql" "fmt" "os" "path/filepath" "sync" "time" _ "modernc.org/sqlite" ) var ( GlobalDB *sql.DB once sync.Once ) func InitCache() { once.Do(func() { dbPath := "./database/local/user.db" if err := os.MkdirAll(filepath.Dir(dbPath), 0755); err != nil { panic(fmt.Sprintf("创建数据库目录失败:%v", err)) } db, err := sql.Open("sqlite", dbPath) if err != nil { panic(fmt.Sprintf("打开 SQLite 数据库失败:%v", err)) } if err := db.Ping(); err != nil { _ = db.Close() panic(fmt.Sprintf("验证 SQLite 连接失败:%v", err)) } db.SetMaxOpenConns(1) db.SetMaxIdleConns(1) db.SetConnMaxLifetime(0) db.SetConnMaxIdleTime(30 * time.Minute) GlobalDB = db fmt.Printf("SQLite 数据库初始化成功,文件路径:%s\n", dbPath) }) } func GetCacheDB() *sql.DB { if GlobalDB == nil { panic("数据库未初始化,请先调用 cache.InitCache()") } return GlobalDB } func CloseCache() error { if GlobalDB != nil { return GlobalDB.Close() } return nil }