Я хотел бы передать []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 напрямую, как это предлагается в этого ответа .