package main import ( "log" "math/rand/v2" "net/http" "os" "strconv" ) const usage = `USAGE: webserve [port num (random default)] [serve dir (./ default)] ` func main() { var err error portNum := 1025 if len(os.Args) >= 2 { portNum, err = strconv.Atoi(os.Args[1]) if err != nil { log.Fatalf("bad port number:%s\n", err) } } else { portNum = rand.IntN(65535-1025) + 1025 } dir := "./" if len(os.Args) >= 3 { dir = os.Args[2] } middleware := func(next func(w http.ResponseWriter, r *http.Request)) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { log.Println("serving " + r.URL.Path) if r.URL.Path == "/favicon.ico" { w.Write(nil) return } next(w, r) } } fs := http.FileServer(http.Dir(dir)) http.HandleFunc("/", http.HandlerFunc(middleware(fs.ServeHTTP))) log.Print("Listening on :" + strconv.Itoa(portNum) + "...") err = http.ListenAndServe(":"+strconv.Itoa(portNum), nil) if err != nil { log.Fatal(err) } }