package sqldb import ( "dashboard/models" "dashboard/settings" "fmt" "strings" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" ) type SqlDb struct { *sqlx.DB } const ( mysqlDsn = "%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local" ) func NewDb(conf *settings.SqlConfig) (*SqlDb, error) { if strings.Contains(conf.Type, "sqlite") { db, err := sqlx.Connect("sqlite3", conf.Database) if err != nil { return nil, err } return &SqlDb{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 &SqlDb{db}, nil } return nil, models.ErrorSqlInitErr }