package main import ( "fmt" "net/http" ) const log_length = 100 func main() { fs := http.FileServer(http.Dir("static")) var logs [log_length]string n := 0 // Define a handler function for the root path http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { addRotLog(&logs, &n, fmt.Sprintf("Accessed %s", r.URL.Path)) // Serve the index.html file from the static directory http.StripPrefix("/", fs).ServeHTTP(w, r) }) http.HandleFunc("/logs", createGetLogs(&logs)) http.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "foo!") }) // Start the server on port 8080 fmt.Println("Server is listening on port 8080...") err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Printf("Error starting server: %s\n", err) } } func createGetLogs(logs *[log_length]string) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { for _, s := range logs { fmt.Fprintln(w, s) } } } func addRotLog(logs *[log_length]string, last *int, value string) { if *last == log_length { for i := 0 ; i < log_length-1; i++ { logs[i] = logs[i+1] } logs[log_length-1] = value } else { logs[*last] = value *last++ } }