首頁 > 後端開發 > Golang > 如何將 Golang 範本輸出分配給變數?

如何將 Golang 範本輸出分配給變數?

Barbara Streisand
發布: 2025-01-03 16:10:42
原創
297 人瀏覽過

How to Assign Golang Template Output to a Variable?

如何擷取 Golang 範本輸出或將其指派給變數

在 Go 中,您可以定義和執行可以動態產生 HTML 或其他文字格式的範本。人們可能想要捕獲模板的輸出並將其分配給變數。

問題

使用 Go 的內建模板語言無法直接實現這一點。嘗試這樣做,如下例所示,將導致「操作數中出現意外的」錯誤:

{{$var := template "my-template"}}
登入後複製

解決方案

要繞過此限制,您可以註冊檢索模板輸出的自訂函數。操作方法如下:

  • 註冊自訂函數:
var t *template.Template

// execTempl retrieves the output of a named template.
func execTempl(name string) (string, error) {
    buf := &bytes.Buffer{}  // Create a buffer to store the template output.
    err := t.ExecuteTemplate(buf, name, nil)  // Execute the template into the buffer.
    return buf.String(), err
}
登入後複製
  • 將函數與模板:
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}}
`
登入後複製

在範本中,您可以使用已註冊的「execTempl」函數來擷取命名範本的輸出並將其指派給變數:

package main

import (
    "bytes"
    "fmt"
    "os"
    "text/template"
)

const tmpl = `{{define "my-template"}}my-template content{{end}}
See result:
{{$var := execTempl "my-template"}}
{{$var}}
`

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

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

    if err := t.Execute(os.Stdout, nil); err != nil {
        fmt.Println(err)
    }
}
登入後複製
範例

這是一個完整的範例,示範了此方法的用法技術:
See result:
my-template content
登入後複製

透過執行上述程式將產生以下輸出:透過使用此技術,您可以捕獲任意模板的輸出並將其儲存在變數中以供進一步使用處理或呈現。

以上是如何將 Golang 範本輸出分配給變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板