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 關注
- 196 瀏覽
添加回答
舉報