I am using the net/http
standard library package for subrouting in Golang while developing a simple API. However, I encountered a problem. I have user routes for registration with POST /v1/users/
. When I try to send a request to POST /v1/users
, I get a 404 page not found
error. I need to add a trailing /
to make it work. I believe it should work with both trailing /
and without trailing /
. If you can help me fix this, it would be great.
Here is my main.go
:
package main
import (
"log/slog"
"net/http"
"os"
routes "github.com/rohitvpatil0810/go-url-shortener-api/api/v1"
"github.com/rohitvpatil0810/go-url-shortener-api/internal/config"
"github.com/rohitvpatil0810/go-url-shortener-api/pkg/logger"
)
func main() {
config, err := config.LoadConfig()
if err != nil {
slog.Error("Error loading config", "error", err)
os.Exit(1)
}
router := routes.RegisterV1Routes()
server := http.Server{
Addr: ":" + config.Port,
Handler: router,
}
logger.Logger.Info("Starting server", slog.String("port", config.Port))
server.ListenAndServe()
}
api/v1.go
:
package routes
import "net/http"
func RegisterV1Routes() http.Handler {
router := http.NewServeMux()
router.Handle("/v1/", http.StripPrefix("/v1", RegisterRoutes()))
return router
}
api/routes.go
:
package routes
import "net/http"
func RegisterRoutes() http.Handler {
router := http.NewServeMux()
router.Handle("/users/", http.StripPrefix("/users", RegisterUserRoutes()))
return router
}
api/user_routes.go
:
package routes
import "net/http"
func RegisterUserRoutes() http.Handler {
router := http.NewServeMux()
router.HandleFunc("POST /", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("<p>POST /users</p>"))
})
router.HandleFunc("POST /login", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("<p>POST /users/login</p>"))
})
router.HandleFunc("POST /logout", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("<p>POST /users/logout</p>"))
})
return router
}
According to this documentation, it should redirect POST /v1/users
to POST /v1/users/
. Am I right or wrong?