config.go — Configuration
Reads environment variables with fallback defaults. Flags can override port and log level.
package main
import (
"flag"
"log"
"os"
)
type Config struct {
Port string
DatabaseURL string
LogLevel string
}
func getEnv(key, fallback string) string {
if val := os.Getenv(key); val != "" {
return val
}
return fallback
}
func mustGetEnv(key string) string {
val, ok := os.LookupEnv(key)
if !ok {
log.Fatalf("required environment variable %s is not set", key)
}
return val
}
func LoadConfig() Config {
cfg := Config{
Port: getEnv("PORT", "8080"),
DatabaseURL: getEnv("DATABASE_URL", "postgres://bookmarks:localdev@localhost:5432/bookmarks?sslmode=disable"),
LogLevel: getEnv("LOG_LEVEL", "info"),
}
flag.StringVar(&cfg.Port, "port", cfg.Port, "server port")
flag.StringVar(&cfg.LogLevel, "log-level", cfg.LogLevel, "log level")
flag.Parse()
return cfg
}