Viewing:
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)
}
}