Hello!

You could create in your packages a function that receives  a  
*http.ServeMux, by this reference you can configure you're path an function 
related.

Example:
"example.go"

func FooPath(mux *http.ServeMux) {
    mux.HandleFunc("/foo", exampleFoo)
}

func exampleFoo(w http.Res..., r *http.Req) {
    json.NewEncoder(w).Encode("Hi there!")
}

-----
...
-----

"routes.go"

fun main() {
    //router
    mux := http.NewServeMux()
    
    //config the paths
    example.FooPath(mux)
    
    s := &http.Server{
        Addr:           "localhost:1324",
        Handler:        mux,
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
    }
    log.Fatal(s.ListenAndServe())
}

Em terça-feira, 6 de abril de 2021 às 11:30:02 UTC-3, Van Fury escreveu:

>
> 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/b2da6509-ca1b-4449-826c-34768eccdf36n%40googlegroups.com.

Reply via email to