package database import ( "database/sql" "fmt" "time" _ "github.com/lib/pq" ) type Config struct { Host string Port int User string Password string DBName string } func NewConnection(cfg Config) (*sql.DB, error) { dsn := fmt.Sprintf( "host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", cfg.Host, cfg.Port, cfg.User, cfg.Password, cfg.DBName, ) db, err := sql.Open("postgres", dsn) if err != nil { return nil, err } // Connection pooling db.SetMaxOpenConns(25) db.SetMaxOpenConns(5) db.SetConnMaxLifetime(5 * time.Minute) db.SetConnMaxIdleTime(10 * time.Minute) if err := db.Ping(); err != nil { return nil, err } return db, nil }