Go模板引擎數據傳遞:如何擺脫PHP的assign方法實現數據渲染?

go模板引擎數據傳遞:告別php的assign方法,輕松實現數據渲染

本文講解如何使用Go模板引擎(text/template)傳遞數據,并對比PHP的assign方法,幫助熟悉PHP的開發者理解Go模板的賦值機制。

Go模板引擎數據傳遞:如何擺脫PHP的assign方法實現數據渲染?

在PHP中,我們習慣使用assign方法將變量傳遞給模板。但在Go中,text/template的賦值方式不同,它通過template.Execute函數的第二個參數實現數據傳遞。

假設你有一個包含文件信息的切片filelist,在PHP中你可能使用assign(‘filelist’, $filelist)。 在Go中,直接將filelist作為template.Execute的第二個參數傳遞即可:t.Execute(w, filelist)。

立即學習PHP免費學習筆記(深入)”;

然而,直接使用{{range $i, $v := .}}遍歷數據可能存在歧義,因為.代表Execute函數的第二個參數本身。 為了更清晰地訪問filelist,建議將其封裝結構體map中。

以下提供兩種方法:

方法一:使用map傳遞數據 (推薦)

這種方法更清晰,避免歧義。我們創建一個map,鍵名為”filelist”,值為filelist切片。

package main  import (     "os"     "text/template" )  type filename struct {     name string }  func main() {     const templatetext = `<p>{{range $i, $v := .filelist}}<div>{{$v.name}}</div>{{end}}</p>`      filelist := []filename{{"a.txt"}, {"b.txt"}}      t := template.Must(template.New("tmpl").Parse(templatetext))      err := t.Execute(os.Stdout, map[string]interface{}{"filelist": filelist})     if err != nil {         panic(err)     } }

方法二:直接傳遞變量 (簡潔但需謹慎)

這種方法直接傳遞filelist,在模板中使用.訪問。代碼更簡潔,但可讀性稍遜,需要確保理解.的含義。

package main  import (     "os"     "text/template" )  type FileName struct {     Name string }  func main() {     const templateText = `<p>{{range $i, $v := .}}<div>{{$v.Name}}</div>{{end}}</p>`      fileList := []FileName{{"a.txt"}, {"b.txt"}}      t := template.Must(template.New("tmpl").Parse(templateText))      err := t.Execute(os.Stdout, fileList)     if err != nil {         panic(err)     } }

兩種方法都能實現數據渲染。 推薦使用方法一,因為它更清晰易懂,避免了潛在的沖突。 方法二更簡潔,但需要開發者對Go模板的.操作符有充分的理解。 選擇哪種方法取決于你的項目需求和個人偏好。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享