Как передать вложенную структуру в аргумент - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь создать структуру для моих маршрутов API. У меня есть две структуры: запросы и маршрут. Затем у меня есть часть моих маршрутов, созданная на основе моего типа Route.

После создания моих маршрутов я создаю новый маршрутизатор и выполняю итерации по диапазону маршрутов и передаю их Methods, Path, Handlerи запросы.

Я продолжаю получать сообщение об ошибке при попытке передать запросы, в которых

не может использовать route.Queries (type [] Queries) в качестве строки типа в аргументе ...

type Queries struct {
    item     string
    useritem string
    key      string
    userkey  string
}


type Route struct {
    Method     string
    Path       string
    HandleFunc http.HandlerFunc
    Queries []Queries
}

var Routes = []Route{
    {
        Method:     "GET",
        Path:       "/items",
        HandleFunc: controllers.Getitems,
        Queries: []Queries{{"item", "{useritem}", "key", "{userkey}",},
        },
    },
}

func CreateRouter() *mux.Router {
    router := mux.NewRouter()

    for _, route := range Routes {
        router.
            Methods(route.Method).
            Path(route.Path).
            Handler(route.HandleFunc).
            Queries(route.Queries) //This is where the error occurs
        } 
        return router
    }

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Сначала преобразуйте route.Queries в queries []string.

Затем вам необходимо распаковать массив в качестве аргументов. Вместо этого используйте router.Queries(queries...).

См. https://github.com/gorilla/mux/blob/master/mux.go#L341 для реализации этого метода.

0 голосов
/ 10 ноября 2019

@ mkopriva Я какое-то время играл с этим и реализовал (я думаю) приведенный выше совет, но теперь я получаю syntax error: unexpected ..., expecting expressiongo

Вот как выглядит мой код:

type Queries struct {
    item     string
    useritem string
    key      string
    userkey  string
}

type Route struct {
    Method     string
    Path       string
    HandleFunc http.HandlerFunc
    Queries []string
}


// Routes is
var Routes = []Route{
    {
        Method:     "GET",
        Path:       "/items",
        HandleFunc: controllers.Getitems,
        Queries: []string{
            "item", "{useritem}", "key", "{userkey}",
        },
    },
}

// CreateRouter is
func CreateRouter() {

    router := mux.NewRouter()

    for _, route := range Routes {
        router.
            Methods(route.Method).
            Path(route.Path).
            Handler(route.HandleFunc).
            Queries(router.Queries(...))
    }
    return router
}```
...