Маршрутизация API-маршрутов в Golang - PullRequest
0 голосов
/ 30 марта 2020

Я хочу иметь возможность организовывать все свои маршруты по отдельным папкам и соответственно выполнять маршрут. Таким образом, это означает, что вместо того, чтобы все мои HandleFun c находились в одной области (и имели 50 маршрутов в одном файле), я могу перенаправить все мои «пользовательские» маршруты API в каталог пользователя, куда они будут направлены далее ». пользовательские функции, я мог бы перенаправить все свои API-маршруты 'messages' в каталог 'messages', где они в дальнейшем были бы перенаправлены на функциональность 'messages', например c. Так что, если кто-то перейдет на localhost: 5000 / api / маршруты / пользователь / getUser, я перенаправлю его на другой маршрутизатор в / api / routs / users, который затем перенаправит на GetUserHandler ().

То, что у меня сейчас есть

// main.go
package main

import (
    "net/http"
    "github.com/gorilla/mux"
)

func GetUserHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Got a user"))
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("api/routes/getUser", GetUserHandler)

    http.ListenAndServe(":8000", r)
}

Что я пытаюсь сделать

// api/routes/user.go
import (
    "net/http"
    "github.com/gorilla/mux"
)


// somehow route /getUser to this function
func GetUserHandler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Got a user"))
}
// main.go
package main

import (
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    r := mux.NewRouter()

    // somehow route to to all my user functions
    // the 'User' here is just an example to help illustrate my point
    r.HandleFunc("api/routes/user", User)

    http.ListenAndServe(":8000", r)
}

1 Ответ

0 голосов
/ 31 марта 2020

Вы НЕ МОЖЕТЕ разделять их физически, но можете разделить их логически (для повышения читабельности):

r := mux.NewRouter()
r.HandleFunc("/account/{key}", AccountHandler)
r.HandleFunc("/category/{key}", CategoryHandler)

Если вы посмотрите на приведенный выше код, это необходимо для регистрации маршрутов (как вы уже знаете: - )). Таким образом, здесь есть шаблон, который поможет разделить маршруты к соответствующим папкам. Вы можете использовать функцию карты Golang, определяя маршруты в качестве ключа и функции в качестве значений. Таким образом, вместо записи 100 маршрутов в один файл, вы можете записать их в соответствующие папки.

Я написал пример для логического разделения: https://gitlab.com/nerdyram/test-gorilla-mux

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...