2025-08-21 15:57:09 +08:00

51 lines
901 B
Go

package database
import (
"database/sql"
"fmt"
"sync"
"weatherstation/internal/config"
_ "github.com/lib/pq"
)
var (
instance *sql.DB
once sync.Once
)
// GetDB 返回数据库连接单例
func GetDB() *sql.DB {
once.Do(func() {
cfg := config.GetConfig()
connStr := fmt.Sprintf(
"host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
cfg.Database.Host,
cfg.Database.Port,
cfg.Database.User,
cfg.Database.Password,
cfg.Database.DBName,
cfg.Database.SSLMode,
)
var err error
instance, err = sql.Open("postgres", connStr)
if err != nil {
panic(fmt.Sprintf("无法连接到数据库: %v", err))
}
if err = instance.Ping(); err != nil {
panic(fmt.Sprintf("数据库连接测试失败: %v", err))
}
})
return instance
}
// Close 关闭数据库连接
func Close() error {
if instance != nil {
return instance.Close()
}
return nil
}