2017-06-07 3 views
1

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...") 
} 

Antwort

1

Es funktioniert nicht, da es nicht einmal ist „Handler Laden /handler_one.go "

Meinst du, dass die init Funktion in handlers/handler_one.go nicht ausgeführt wird?

Das wäre zu erwarten, da Sie in dem Code, den Sie eingefügt haben, dieses Paket nirgends importieren.

Versuchen Sie, dieses Paket in Ihrem main.go zu importieren.

Sie können als _ importieren, wenn der einzige Grund für den Import wäre, dass die init-Funktion ausgeführt wird.