请问 go template 具体是如何赋值变量到模板的?

小弟是做 php 开发出身的,最近在学 go,因需求需要用到 go template 方面的东西,看了网上很多关于 template 用法方面的文章,感觉写的都很难懂,讲的都是写云里雾里不切实际的东西,我就以 php 的做法请教一下各位大神吧:

php 赋值给模板的操作,一般都是通过 assign 方法,两个参数,一个是 php 文件中的变量名称,一个是 模板中的变量名称,简洁易懂,请问 go 是如何实现这个步骤的呢?

比如我现在代码如下:

fileList := GetFileList(file.Name) //这是个切片类型

t1, err := template.ParseFiles("html/show_dir_list.html")
if err != nil {
    panic(err)
}
_ = t1.Execute(w, fileList)

我该如何将 fileList 这个变量的内容赋值到模板中去呢?

目前模板代码如下:

<p>
    {{range $i, $v := .fileList}}
<div>{{$v.Name}}</div>
    {{end}}
</p>
阅读 3k
1 个回答
package main

import (
    "os"
    "text/template"
)

type FileName struct {
    Name string
}

func main() {
    // Define a template.
    const templateText = `<p>
    {{range $i, $v := .fileList}}
<div>{{$v.Name}}</div>
    {{end}}
</p>
`

    // Prepare some data to insert into the template.
    fileList := []FileName{{"a.txt"}, {"b.txt"}}

    // Create a new template and parse the letter into it.
    t := template.Must(template.New("tmpl").Parse(templateText))

    // Execute the template for each recipient.
    err := t.Execute(os.Stdout, map[string]interface{}{"fileList": fileList})
    if err != nil {
        panic(err)
    }
}

结果是

<p>
<div>a.txt</div>
<div>b.txt</div>
</p>

变量传进模板靠Execute的第二个参数,你可以用map或者struct来传。直接传 fileList 也可以,注意Go模板里的 . 代表的就是你传的这个参数。

直接传fileList的写法是这样。

    // Define a template.
    const templateText = `<p>
    {{range $i, $v := .}}
<div>{{$v.Name}}</div>
    {{end}}
</p>
`

    // Prepare some data to insert into the template.
    fileList := []FileName{{"a.txt"}, {"b.txt"}}

    // Create a new template and parse the letter into it.
    t := template.Must(template.New("tmpl").Parse(templateText))

    // Execute the template for each recipient.
    err := t.Execute(os.Stdout, fileList)
    if err != nil {
        panic(err)
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题