package store import ( "fmt" "strings" "github.com/glebarez/sqlite" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/gorm" ) type Config struct { Debug bool } func New(uri string, configs ...Config) (*Client, error) { strs := strings.Split(uri, "::") if len(strs) != 2 { return nil, fmt.Errorf("db.Init: opt db uri invalid: %s", uri) } c := &Client{ttype: strs[0]} if len(configs) > 0 && configs[0].Debug { c.debug = true } var ( err error dsn = strs[1] ) switch strs[0] { case "sqlite": c.cli, err = gorm.Open(sqlite.Open(dsn)) case "mysql": c.cli, err = gorm.Open(mysql.Open(dsn)) case "postgres": c.cli, err = gorm.Open(postgres.Open(dsn)) default: return nil, fmt.Errorf("db type only support: [sqlite, mysql, postgres], unsupported db type: %s", strs[0]) } if err != nil { return nil, fmt.Errorf("db.Init: open %s with dsn:%s, err: %w", strs[0], dsn, err) } return c, nil } func Init(uri string, configs ...Config) (err error) { if Default, err = New(uri, configs...); err != nil { return err } return nil }