package db import ( "database/sql" "fmt" "log" "os" _ "github.com/go-sql-driver/mysql" "github.com/joho/godotenv" ) func InitDB() (*sql.DB, error) { // Load environment variables from .env file err := godotenv.Load() if err != nil { log.Println("Error loading .env file, using environment variables directly") } // Get database connection details from environment variables user := os.Getenv("DB_USER") pass := os.Getenv("DB_PASSWORD") host := os.Getenv("DB_HOST") port := os.Getenv("DB_PORT") dbname := os.Getenv("DB_NAME") // Construct the data source name (DSN) dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", user, pass, host, port, dbname) // Open a connection to the database db, err := sql.Open("mysql", dsn) if err != nil { return nil, fmt.Errorf("failed to open database connection: %w", err) } // Ping the database to ensure the connection is working if err := db.Ping(); err != nil { return nil, fmt.Errorf("failed to ping database: %w", err) } log.Println("Database connection established") return db, nil }