In meiner API werde ich viele separate Handler für jeden Pfad haben wie "/ api/v1/handler_one" und "/ api/v1/handler_two". Ich versuche, jeden Handler in sein eigenes Paket zu packen, um die Pflege zu erleichtern.Golang Gorilla/Mux Routen im externen Paket registrieren
Ich habe ein Beispiel hinzugefügt. Es funktioniert nicht, da es nicht einmal "handlers/handler_one.go" lädt. Was vermisse ich?
main.go
package main
import (
"net/http"
"git/myapp/router"
)
func main() {
myRouter := router.APIRouter
srv := &http.Server{
Handler: myRouter,
Addr: "0.0.0.0:8080",
}
log.Fatal(srv.ListenAndServe())
}
Router/router.go
package router
import (
"github.com/gorilla/mux"
)
var Router = mux.NewRouter().StrictSlash(true)
var APIRouter = Router.PathPrefix("/api/v1").Subrouter()
Handler/handler_one.go
package handler_one
import (
"git/myapp/router"
)
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type APIRoutes []Route
var apiRoutes = APIRoutes{
Route{ "OneIndex", "GET", "/one", OneIndex, },
}
func init() {
// Register routes
for _, route := range apiRoutes {
var handler http.Handler
handler = route.HandlerFunc
handler = Logger(handler, route.Name)
router.APIRouter.
Methods(route.Method).Path(route.Pattern).Name(route.Name).Handler(handler)
}
}
// OneIndex is handling the requests to /api/v1/one
func OneIndex(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
fmt.Println("Doing something...")
}