HI,

I have the following settings in my REST API program packages:

In "routers.go"

type Route struct {
    Name        string
    Method      string
    Pattern     string
    HandlerFunc http.HandlerFunc
}

var Router = NewRouter()

type Routes []Route

func NewRouter() *mux.Router {
    router := mux.NewRouter().StrictSlash(true)
    for _, route := range routes {
        var handler http.Handler
        handler = route.HandlerFunc

        router.
            Methods(route.Method).
            Path(route.Pattern).
            Name(route.Name).
            Handler(handler)
    }

    return router
}

func Index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello World!")
}

var routes = Routes{

    Route{
        "UserData",
        strings.ToUpper("Get"),
        "/{id}/user-data",
        UserData,
    },

    Route{
        "UserData",
        strings.ToUpper("Post"),
        "/{id}/user-data",
        UserData,
    },

    Route{
        "ExampleData",
        strings.ToUpper("Post"),
        "/{id}/example-data",
        ExampleData,
    },

    Route{
        "ExampleData",
        strings.ToUpper("Get"),
        "/{id}/example-data",
        ExampleData,
    },

}

In "main.go"

func main(){

var LISTENING_ADDR = GetListeningAddress()
...

server := NewServer(LISTENING_ADDR)

     go func() {
        err := server.ListenAndServe() // use if http
        if err != nil && err != http.ErrServerClosed {
            logger.Log.Errorf("Could not listen on %s: %v\n", 
LISTENING_ADDR, err)
            os.Exit(0)
        }
    }()

}

// NewServer - Create a new server
func NewServer(LISTENING_ADDR string) *http.Server {

    return &http.Server{
        Addr:         LISTENING_ADDR,
        Handler:      Router,
        TLSConfig:    TLSConfig(),
        ReadTimeout:  5 * time.Second,
        WriteTimeout: 10 * time.Second,
        IdleTimeout:  120 * time.Second,
    }
}

I have two other packages, example.go and user.go which contain the handler 
functions.

"example.go"
func ExampleDataPost(w http.Res..., r *http.Req) {
...
}

func ExampleDataGet(w http.Res..., r *http.Req) {
...
}

Also In "user.go" is
func UserDataPost(w http.Res..., r *http.Req) {
...
}

func UserDataGet(w http.Res..., r *http.Req) {
...
}

I would like to move their routes in their respective packages.
I have for example added to "user.go"  what is shown below and the same for 
"example.go" but my problem is how to call the variables (group routers) 
"UserNewRouter ", "ExampleNewRouter" in their respective routers in the 
main.go or the "NewServer". 
Any help on how to go about this?

"user.go"

func UserDataPost(w http.Res..., r *http.Req) {
...
}

func UserDataGet(w http.Res..., r *http.Req) {
...
}

type Route struct {
    Name        string
    Method      string
    Pattern     string
    HandlerFunc http.HandlerFunc
}

var UserNewRouter = NewRouter()

type Routes []Route

func NewRouter() *mux.Router {
    router := mux.NewRouter().StrictSlash(true)
    for _, route := range routes {
        var handler http.Handler
        handler = route.HandlerFunc

        router.
            Methods(route.Method).
            Path(route.Pattern).
            Name(route.Name).
            Handler(handler)
    }

    return router
}

var routes = Routes{

    Route{
        "UserDataGet",
        strings.ToUpper("Get"),
        "/{id}/user-data",
        UserDataGet,
    },

    Route{
        "UserDataPost",
        strings.ToUpper("Post"),
        "/{id}/user-data",
        UserDataPost,
    },

}


"example.go"
func ExampleDataPost(w http.Res..., r *http.Req) {
...
}

func ExampleDataGet(w http.Res..., r *http.Req) {
...
}
 
type Route struct {
    Name        string
    Method      string
    Pattern     string
    HandlerFunc http.HandlerFunc
}

var ExampleNewRouter = NewRouter()

type Routes []Route

func NewRouter() *mux.Router {
    router := mux.NewRouter().StrictSlash(true)
    for _, route := range routes {
        var handler http.Handler
        handler = route.HandlerFunc

        router.
            Methods(route.Method).
            Path(route.Pattern).
            Name(route.Name).
            Handler(handler)
    }

    return router
}

var routes = Routes{
    Route{
        "ExampleDataPost",
        strings.ToUpper("Post"),
        "/{id}/example-data",
        ExampleDataPost,
    },

    Route{
        "ExampleDataGet",
        strings.ToUpper("Get"),
        "/{id}/example-data",
        ExampleDataGet,
    },
}

BR
Fury

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/1b3d4508-51a2-42c9-8b9b-55d715fb7392n%40googlegroups.com.

Reply via email to