github.com/kotovmak/go-admin@v1.1.1/modules/db/base.go (about) 1 package db 2 3 import ( 4 "database/sql" 5 "errors" 6 "sync" 7 8 "github.com/kotovmak/go-admin/modules/config" 9 "xorm.io/xorm" 10 ) 11 12 // Base is a common Connection. 13 type Base struct { 14 DbList map[string]*sql.DB 15 Once sync.Once 16 Configs config.DatabaseList 17 } 18 19 // Close implements the method Connection.Close. 20 func (db *Base) Close() []error { 21 errs := make([]error, 0) 22 for _, d := range db.DbList { 23 errs = append(errs, d.Close()) 24 } 25 return errs 26 } 27 28 // GetDB implements the method Connection.GetDB. 29 func (db *Base) GetDB(key string) *sql.DB { 30 return db.DbList[key] 31 } 32 33 func (db *Base) CreateDB(name string, beans ...interface{}) error { 34 cfg := db.GetConfig(name) 35 if cfg.Driver == "" { 36 return errors.New("wrong connection name") 37 } 38 engine, err := xorm.NewEngine(cfg.Driver, cfg.GetDSN()) 39 if err != nil { 40 return err 41 } 42 defer func() { 43 _ = engine.Close() 44 }() 45 err = engine.Sync(beans...) 46 if err != nil { 47 return err 48 } 49 return nil 50 } 51 52 func (db *Base) GetConfig(name string) config.Database { 53 return db.Configs[name] 54 }