package store import ( "context" "time" "git.118im.com/im_team/im_workbench/internal/config" "github.com/jmoiron/sqlx" ) type Store struct { db *sqlx.DB } func Open(cfg config.MySQLConfig) (*Store, error) { db, err := sqlx.Open("mysql", cfg.DSN) if err != nil { return nil, err } db.SetMaxOpenConns(cfg.MaxOpenConns) db.SetMaxIdleConns(cfg.MaxIdleConns) db.SetConnMaxLifetime(30 * time.Minute) ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := db.PingContext(ctx); err != nil { _ = db.Close() return nil, err } return &Store{db: db}, nil } func (s *Store) Close() error { if s == nil || s.db == nil { return nil } return s.db.Close() }