3 回答
TA贡献1875条经验 获得超5个赞
使用数组作为第二个参数,而不是模板本身。
package main
import (
"html/template"
"log"
"os"
)
func main() {
t := template.Must(template.New("").Parse(`{{- range .}}{{.}}:
echo "from {{.}}"
{{end}}
`))
t.Execute(os.Stdout, []string{"app1", "app2", "app3"})
f, err := os.Create("./myfile")
if err != nil {
log.Println("create file: ", err)
return
}
err = t.Execute(f, []string{"app1", "app2", "app3"})
if err != nil {
log.Print("execute: ", err)
return
}
f.Close()
}
输出:
app1:
echo "from app1"
app2:
echo "from app2"
app3:
echo "from app3"
而内容myfile是,
app1:
echo "from app1"
app2:
echo "from app2"
app3:
echo "from app3"
TA贡献1829条经验 获得超9个赞
你给了一个错误的参数:
err = t.Execute(f, t)
它应该是
err = t.Execute(f,[]string{"app1", "app2", "app3"})
TA贡献1963条经验 获得超6个赞
您第二次传递给模板执行的参数应该与您第一次传递的参数相匹配。
首先你做:
t.Execute(os.Stdout, []string{"app1", "app2", "app3"})
其次你做:
err = t.Execute(f, t)
您传递了模板本身 ( t
)。将其更改为:
err = t.Execute(f, []string{"app1", "app2", "app3"})
您的模板迭代传递的参数(带有一个{{range}}
动作),当您传递一个切片时它会起作用,而在传递模板时它不会起作用,它是一个指向结构的指针,它不是模板引擎可以迭代的东西。
- 3 回答
- 0 关注
- 150 浏览
添加回答
举报