Разложить ломтик как список аргументов - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть эта функция:

func Middleware(adapters ...interface{}) http.HandlerFunc {
    // ...
}

, и я пытаюсь вызвать ее через:

middleware := []mw.Adapter{mw.Error(),mw.Auth("x-huru-api-token")}
router.HandleFunc("/person_data_field", 
mw.Middleware(middleware...,h.makeGetMany(v))).Methods("GET")

это не компилируется, я получаю:

enter image description here

В любом случае мне нужно распределить фрагмент так, чтобы он передавался в виде нескольких аргументов, а не только одного аргумента ...

С JS,это просто выглядит так:

const v = [1,2,3];

const f = function(...values){
    console.log(values);  // [1,2,3,4]
};

f(...v,4);

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете передавать переменные аргументы по отдельности или в виде одного среза.Вы не можете смешивать и сочетать.Тип элемента среза должен соответствовать типу аргумента variadic.

Чтобы устранить проблему, поместите все аргументы variadic в фрагмент []interface{}:

middleware := []interface{}{mw.Error(),mw.Auth("x-huru-api-token"), h.makeGetMany(v)}
router.HandleFunc("/person_data_field", mw.Middleware(middleware...)).Methods("GET")

Use sliceтрюки , если вы не можете построить срез напрямую, как показано в предыдущем фрагменте.

middleware := []mw.Adapter{mw.Error(),mw.Auth("x-huru-api-token")}
router.HandleFunc("/person_data_field", mw.Middleware(
    append(append([]interface{}{}, middleware...), h.makeGetMany(v)))).Methods("GET")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...