package main import ( "encoding/json" "fmt" "io" "net/http" "tmp/internal/database" _ "github.com/mattn/go-sqlite3" ) // The button state as represented in memory type ButtonState struct { pressCount int } // This is what a handler with a receiver looks like // Keep in mind that concurrent state access is not (usually) safe // And will in pracice be guarded by a mutex func (b *ButtonState) pressHandler(w http.ResponseWriter, r *http.Request) { b.pressCount++ response, err := json.Marshal(b.pressCount) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } fmt.Println("Request received") io.WriteString(w, string(response)) } // This is what a handler looks like func handler(w http.ResponseWriter, r *http.Request) { fmt.Println("Request received") io.WriteString(w, "This is my website!\n") } func main() { database.DbConnect() b := &ButtonState{pressCount: 0} // Mounting the handlers fs := http.FileServer(http.Dir("static")) http.Handle("/", fs) http.HandleFunc("/hello", handler) http.HandleFunc("/button", b.pressHandler) // Start the server on port 8080 println("Currently listening on http://localhost:8080") println("Visit http://localhost:8080/hello to see the hello handler in action") println("Visit http://localhost:8080/button to see the button handler in action") println("Press Ctrl+C to stop the server") err := http.ListenAndServe(":8080", nil) if err != nil { panic(err) } }