2015-04-11 15 views
6

Sto usando gorilla/mux per le mie esigenze di instradamento. Ma ho notato un problema, quando nido più subrouters non funziona.Subrouters di annidamento in Gorilla Mux

Ecco l'esempio:

func main() { 
    r := mux.NewRouter().StrictSlash(true) 
    api := r.Path("/api").Subrouter() 
    u := api.Path("/user").Subrouter() 
    u.Methods("GET").HandleFunc(UserHandler) 
    http.ListenAndServe(":8080", r) 
} 

ho voluto usare questo approccio in modo da poter delegare il popolamento del router per qualche altro pacchetto, per esempio user.Populate(api)

Tuttavia questo non sembra funzionare. Funziona solo se utilizzo il singolo Subrouter nella catena.

Qualche idea?

risposta

8

L'ho capito, quindi lo posterò qui nel caso qualcuno sia stupido come lo ero io. : D

Quando si crea un sottorouter basato su percorso, è necessario ottenerlo con PathPrefix anziché Path.

r.PathPrefix("/api").Subrouter() 

Utilizzare r.Path("/api") solo quando si applica gestori a tale endpoint.