"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como capturar e atribuir a saída do modelo Go a uma variável?

Como capturar e atribuir a saída do modelo Go a uma variável?

Publicado em 2024-12-22
Navegar:439

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

Capturando a saída do modelo em Go

Em um modelo Go, capturar a saída de um submodelo ou atribuí-la diretamente a uma variável é não suportado por padrão. Isso pode ser conseguido, no entanto, registrando uma função personalizada e usando um buffer de bytes para receber o resultado do modelo.

Registro de função personalizada

Para capturar a saída do modelo, registre uma função com Template.Funcs() que recebe o nome do modelo como argumento e retorna a saída do modelo como uma string:

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

Execução de modelo e captura de resultados

Execute o submodelo chamado 'my-template' usando Template.ExecuteTemplate() e atribua-o a uma variável:

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

Saída Recuperação

Recupere a saída capturada e use-a conforme necessário:

See result:
{{$var}}

Exemplo completo

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}}
`

Saída:

See result:

my-template content
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3