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 }