«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как захватить и назначить выходные данные шаблона Go переменной?

Как захватить и назначить выходные данные шаблона Go переменной?

Опубликовано 22 декабря 2024 г.
Просматривать:735

How to Capture and Assign Go Template Output to a Variable?

Захват вывода шаблона в Go

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

Регистрация пользовательской функции

Чтобы записать выходные данные шаблона, зарегистрируйтесь функция с Template.Funcs(), которая принимает имя шаблона в качестве аргумента и возвращает выходные данные шаблона в виде строки:

func execTempl(name string) (string, error) {
    buf := &bytes.Buffer{}
    err := t.ExecuteTemplate(buf, name, nil)
    return buf.String(), err
}

Выполнение шаблона и сбор результатов

Выполните подшаблон с именем «my-template» с помощью Template.ExecuteTemplate() и присвойте его переменной:

{{$var := execTempl "my-template"}}

Получение вывода

Получите захваченный вывод и используйте его по мере необходимости:

See result:
{{$var}}

Полный пример

var t *template.Template

func main() {
    t = template.Must(template.New("").Funcs(template.FuncMap{
        "execTempl": execTempl,
    }).Parse(tmpl))

    if err := t.Execute(os.Stdout, nil); err != nil {
        panic(err)
    }
}

const tmpl = `
{{define "my-template"}}my-template content{{end}}

See result:
{{$var := execTempl "my-template"}}
{{$var}}
`

Вывод:

See result:

my-template content
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3