I was wondering if I should create a new ServeMux and register it to the http.Server
or should I invoke http.HandleFunc
and http.Handler
directly?
I think the route with a ServeMux is better because http.HandleFunc
obviously messes with the global state of the HTTP package, which is considered bad practice in Go. However, in many tutorials, even the official ones, I often see the http.HandleFunc
route being used.
This makes me wonder: why should one use http.HandleFunc
when there is a ServeMux
? I know that ServeMux has some advantages (e.g. you can nest it without repeating the prefix all the time) but I wonder why I should ever choose http.HandleFunc
over Multiplexer, especially since HandleFunc
uses a ServeMux
internally.
Edit: as promised in the comments, I've asked to deprecate the additional (and useless IMO functions) on Golang-dev and they said no (well, on person said no). Here is the link.
http.HandleFunc
andhttp.Handle
should be deprecated, then. Using aMux
andServer
only adds 2 more lines and ambiguity is always bad, especially if the more obvious way is the "bad way". – Addam