package main import ( "database/sql" "fmt" "log" "net/http" "os" "strings" _ "github.com/lib/pq" // PostgreSQL driver, imported for side effects ) func main() { // Get database configuration from environment variables (NEVER hardcode credentials!) dbUser := strings.TrimSpace(os.Getenv("DB_USER")) dbPassword := strings.TrimSpace(os.Getenv("DB_PASSWORD")) dbName := strings.TrimSpace(os.Getenv("DB_NAME")) dbHost := strings.TrimSpace(os.Getenv("DB_HOST")) dbSSLMode := strings.TrimSpace(os.Getenv("DB_SSL_MODE")) // Set secure default for SSL mode if dbSSLMode == "" { dbSSLMode = "require" } // Build connection string from environment variables connStr := fmt.Sprintf("user=%s password=%s dbname=%s host=%s sslmode=%s", dbUser, dbPassword, dbName, dbHost, dbSSLMode) db, err := sql.Open("postgres", connStr) if err != nil { log.Fatalf("Error opening database: %v", err) } defer db.Close() // Ping the database to ensure connection is established err = db.Ping() if err != nil { log.Printf("Warning: Could not connect to database immediately: %v", err) // Don't fatal for example function, but in real app this might be. } else { fmt.Println("Successfully connected to database.") } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello from Go Serverless Function!") }) http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("OK")) }) fmt.Println("Go Serverless Function listening on :8080") log.Fatal(http.ListenAndServe(":8080", nil)) }