Web server
main.go
func main() {
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir("static")))
mux.Handle("/main", fncmp.MiddleWareFn(HandleIndex, HandleMainFn))
log.Fatal(http.ListenAndServe(":8080", mux))
}
By adding fncmp.MiddlewareFn to the '/main' endpoint, we can now serve our index page, as well as the button.
This is the full code:
main.go
package main
import (
"context"
"log"
"net/http"
"github.com/snburman/fncmp"
)
func HandleIndex(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "static/index.html")
}
func HandleMainFn(ctx context.Context) fncmp.FnComponent {
button := fncmp.HTML("<button>Click me</button>")
return fncmp.NewFn(ctx, button)
}
func main() {
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir("static")))
mux.Handle("/main", fncmp.MiddleWareFn(HandleIndex, HandleMainFn))
log.Fatal(http.ListenAndServe(":8080", mux))
}
Run the server and go to http://localhost:8080. You should see the button.
go run main.go
Output:
Now that we can render to the DOM, let's add some interactivity to the button and start to build a web app.