func parseHandlerCSV(w http.ResponseWriter, r *http.Request) { lg.Printf("Upload request from %s\n", r.RemoteAddr) f, _, err := r.FormFile("domainlist") if err != nil { lg.Printf("Error opening CSV: %s\n", err.Error()) fmt.Fprintf(w, "Error opening CSV: %s\n", err.Error()) return } u := unbound.New() defer u.Destroy() setupUnbound(u) v := csv.NewReader(f) o := csv.NewWriter(w) record, err := v.Read() all := NewAllResults() i := 0 if err != nil { lg.Printf("Malformed CSV: %s ", err.Error()) fmt.Fprintf(w, "Malformed CSV: %s\n", err.Error()) return } Check: for err == nil { for _, r1 := range record { result := unboundcheck(u, r1, "NS") lg.Printf("%v from %s\n", result, r.RemoteAddr) all.Append(result) i++ if i > LIMIT { // That's enough...! lg.Printf("limit seen") break Check } } record, err = v.Read() } sort.Sort(all) for _, r := range all.r { if e := o.Write(r.serialize()); e != nil { lg.Printf("Failed to write csv: %s\n", e.Error()) } o.Flush() } }