package main import ( "encoding/json" "io" "log" "net/http" "os" ) func init() { log.SetFlags(log.Lmicroseconds | log.Lshortfile) logFile, err := os.Create("main.log") if err != nil { log.Printf("Error creating log file: %v", err) os.Exit(1) } logger := io.MultiWriter(os.Stdout, logFile) log.SetOutput(logger) } const DOWNLOAD_WORKERS = 10 func main() { downloadQueue := make(chan *DownloadTask, 100) for i := 0; i < DOWNLOAD_WORKERS; i++ { worker := &DownloadWorker{id: i, input: downloadQueue} go worker.Run() } http.HandleFunc("/download", func(responseWriter http.ResponseWriter, request *http.Request) { defer request.Body.Close() req := DownloadRequest{} err := json.NewDecoder(request.Body).Decode(&req) if err != nil { log.Printf("Error parsing JSON: %v", err) http.Error(responseWriter, "Error parsing JSON", http.StatusBadRequest) return } downloadQueue <- &DownloadTask{Url: req.Link} }) log.Println("Server starting on :5000") err := http.ListenAndServe(":5000", nil) if err != nil { log.Println("Error starting server:", err) } }