package database import ( "database/sql" "fmt" "log" ) type database struct { host string port int user string password string dbname string db *sql.DB // Pointer to sql.DB } func New(host string, port int, user, password, dbname string) *database { return &database{ host: host, port: port, user: user, password: password, dbname: dbname, db: nil, } } func (d *database) Connect() error { fmt.Println("Connecting to the database...") psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", d.host, d.port, d.user, d.password, d.dbname) // Construct the connection string db, err := sql.Open("postgres", psqlInfo) // Open a new database connection if err != nil { return fmt.Errorf("failed to open database: %w", err) } // Test the connection if err := db.Ping(); err != nil { return fmt.Errorf("failed to ping database: %w", err) } log.Println("Connected to the database successfully") d.db = db return nil }