Как создать фрагмент интерфейса из массива строк в шаблоне Go? - PullRequest
0 голосов
/ 18 марта 2019

Я хотел бы передать []string функции, которая принимает []interface{} в шаблоне Go (более конкретно в consul-template ).

Вызов (из документов консула-шаблона ):

{{ if containsAny $acceptableTags .Tags }}

Мой первый (немой) подход к настройке $acceptableTags был:

{{ $acceptableTags := "api,ui" | split "," }}

Используя это, я получаю ошибку executing "" at <$acceptableTags>: wrong type for value; expected []interface {}; got []string. Хорошо, поскольку containsAny объявлен как func([]interface{}, interface{}), переменная $acceptableTags должна быть этого типа.

Я нашел рабочее решение с помощью встроенного анализатора JSON:

{{ $acceptableTags := "[\"api\",\"ui\"]" | parseJSON }}

Разве это не немного уродливо , по крайней мере, с моей точки зрения? Есть ли более прямой путь? Что я здесь пропустил?

PS: я использую консул-шаблон, поэтому у меня работает предопределенный шаблонизатор. Я не могу легко добавить собственные функции для использования make() или чего-либо еще в Go напрямую, как это предлагается в этого ответа .

...