package sqldb import ( "dashboard/dao/sqldb/mysql" "dashboard/dao/sqldb/sqlite" "dashboard/models" "dashboard/settings" "fmt" "os" "path/filepath" "strings" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" ) const ( mysqlDsn = "%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local" ) func NewDb(conf *settings.SqlConfig) (BaseDb, error) { if strings.Contains(conf.Type, "sqlite") { cleanDir := filepath.Clean(conf.Database) // 确保目标目录存在 if err := os.MkdirAll(filepath.Dir(cleanDir), 0755); err != nil { return nil, err } db, err := sqlx.Connect("sqlite3", conf.Database) if err != nil { return nil, err } return &sqlite.Sqlite3{Db: db}, nil } if strings.Contains(conf.Type, "mysql") || strings.Contains(conf.Type, "maridb") { dsn := fmt.Sprintf(mysqlDsn, conf.Username, conf.Password, conf.Host, conf.Port, conf.Database) db, err := sqlx.Connect("mysql", dsn) if err != nil { return nil, err } db.SetMaxOpenConns(conf.MaxConns) return &mysql.Mysql{Db: db}, nil } return nil, models.ErrorSqlInitErr }