89 lines
1.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package database
import (
"database/sql"
"fmt"
"sync"
"weatherstation/internal/config"
_ "github.com/go-sql-driver/mysql"
_ "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
}
// -------------------- MySQL 连接rtk_data --------------------
var (
mysqlInstance *sql.DB
mysqlOnce sync.Once
)
// GetMySQL 返回 MySQL 连接单例rtk_data
func GetMySQL() *sql.DB {
mysqlOnce.Do(func() {
cfg := config.GetConfig().MySQL
var dsn string
if cfg.Params != "" {
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DBName, cfg.Params)
} else {
dsn = fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DBName)
}
var err error
mysqlInstance, err = sql.Open("mysql", dsn)
if err != nil {
panic(fmt.Sprintf("无法连接到 MySQL: %v", err))
}
if err = mysqlInstance.Ping(); err != nil {
panic(fmt.Sprintf("MySQL 连接测试失败: %v", err))
}
})
return mysqlInstance
}
// CloseMySQL 关闭 MySQL 连接
func CloseMySQL() error {
if mysqlInstance != nil {
return mysqlInstance.Close()
}
return nil
}