Есть ли эффективный способ конкатенации строк

Например, есть такая функция:

 func TestFunc(str string) string {
 return strings.Trim(str," ")
 }

Он работает в примере ниже:

 {{ $var := printf "%s%s" "x" "y" }}
 {{ TestFunc $var }}

Есть ли способ объединить строки с операторами в шаблоне?

 {{ $var := "y" }}
 {{ TestFunc "x" + $var }}

or

 {{ $var := "y" }}
 {{ TestFunc "x" + {$var} }}

Это дает неожиданный "+" в ошибке операнда.

Я не смог найти его в документации (https://golang.org/pkg/text/template/)


person Özgür Yalçın    schedule 29.07.2017    source источник


Ответы (1)


Невозможно объединить строки с оператором, потому что в шаблонах Go нет операторов.

Используйте функцию printf, как показано в вопросе, или объедините вызовы в одном выражении шаблона:

{{ TestFunc (printf "%s%s" "x" "y") }}

Если вам всегда нужно объединять строки для аргумента TestFunc, напишите TestFunc для обработки объединения:

func TestFunc(strs ...string) string {
   return strings.Trim(strings.Join(strs, ""), " ")
}

{{ TestFunc "x"  $var }}
person Cerise Limón    schedule 29.07.2017
comment
см. также @gyoza github.com/hashicorp/consul-template/issues/ - person 030; 23.03.2020