在做的时候,ExecuteTemplate我看到所有&whateversruct{Title: "title info", Body: "body info"}用于将数据发送到模板以替换信息的示例.我想知道是否有可能不必在我的处理函数之外创建一个结构,因为我拥有的每个处理函数都不会有相同的Title,Body.能够发送一个替换模板信息的地图会很高兴.有什么想法或想法吗?
目前 - 写得很松散
type Info struct {
Title string
Body string
}
func View(w http.ResponseWriter) {
temp.ExecuteTemplate(w, temp.Name(), &Info{Title: "title", Body: "body"})
}
Run Code Online (Sandbox Code Playgroud)
看起来好像创建结构是不必要的.对于您创建的每个函数,结构都不相同.所以你必须为每个函数创建一个结构(我知道).
jim*_*imt 15
为了增加Kevin的答案:匿名结构将产生大致相同的行为:
func View(w http.ResponseWriter) {
data := struct {
Title string
Body string
} {
"About page",
"Body info",
}
temp.ExecuteTemplate(w, temp.Name(), &data)
}
Run Code Online (Sandbox Code Playgroud)
Lil*_*ard 10
那个结构只是一个例子.您也可以从外部传递结构,或者您可以按照建议使用地图.结构很好,因为结构的类型可以记录模板所期望的字段,但它不是必需的.
所有这些应该工作:
func View(w http.ResponseWriter, info Info) {
temp.ExecuteTemplate(w, temp.Name(), &info)
}
Run Code Online (Sandbox Code Playgroud)
func View(w http.ResponseWriter, info *Info) {
temp.ExecuteTemplate(w, temp.Name(), info)
}
Run Code Online (Sandbox Code Playgroud)
func View(w http.ResponseWriter, info map[string]interface{}) {
temp.ExecuteTemplate(w, temp.Name(), info)
}
Run Code Online (Sandbox Code Playgroud)
小智 6
将模板应用于结构与地图之间的重要区别:使用地图,您可以在模板中创建地图中不存在的引用; 模板将执行而没有错误,引用将为空.如果您对结构进行处理并对结构中不存在的内容进行引用,则模板执行会返回错误.
引用地图中不存在的项目非常有用.请考虑此示例webapp中的views.html中的menu.html和getPage()函数:https://bitbucket.org/jzs/sketchground/src .通过使用菜单的地图,可以轻松突出显示活动菜单项.
这种差异的简单说明:
package main
import (
"fmt"
"html/template"
"os"
)
type Inventory struct {
Material string
Count uint
}
func main() {
// prep the template
tmpl, err := template.New("test").Parse("{{.Count}} items are made of {{.Material}} - {{.Foo}}\n")
if err != nil {
panic(err)
}
// map first
sweaterMap := map[string]string{"Count": "17", "Material": "wool"}
err = tmpl.Execute(os.Stdout, sweaterMap)
if err != nil {
fmt.Println("Error!")
fmt.Println(err)
}
// struct second
sweaters := Inventory{"wool", 17}
err = tmpl.Execute(os.Stdout, sweaters)
if err != nil {
fmt.Println("Error!")
fmt.Println(err)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7930 次 |
| 最近记录: |