Templates 在html模板golang中访问多个结构的切片中的结构变量

Templates 在html模板golang中访问多个结构的切片中的结构变量,templates,go,Templates,Go,我试图将包含许多结构的切片发送到html模板 defer latest_threads.Close() for latest_threads.Next(){ var threadID int var subject string var name string var text string var date_posted string latest_threads.Scan(&threadID, &subject, &na

我试图将包含许多结构的切片发送到html模板

defer latest_threads.Close()
for latest_threads.Next(){
    var threadID int
    var subject string
    var name string
    var text string
    var date_posted string
    latest_threads.Scan(&threadID, &subject, &name, &text, &date_posted) 
    post := Post{
        threadID,
        subject,
        name,
        text,
        date_posted,
    }
    posts = append(posts, post)
}
t, error := template.ParseFiles("thread.html")
if error != nil{
    log.Fatal(error)
}
t.Execute(w, posts)
}
我有一个“post”结构

type Post struct {
  threadID int
  subject string
  name string
  text string
  date_posted string
}
我创建了一个类型为
Post
posts:=[]Post{}
)的切片

然后使用数据库中的行填充此切片,然后在模板上执行

defer latest_threads.Close()
for latest_threads.Next(){
    var threadID int
    var subject string
    var name string
    var text string
    var date_posted string
    latest_threads.Scan(&threadID, &subject, &name, &text, &date_posted) 
    post := Post{
        threadID,
        subject,
        name,
        text,
        date_posted,
    }
    posts = append(posts, post)
}
t, error := template.ParseFiles("thread.html")
if error != nil{
    log.Fatal(error)
}
t.Execute(w, posts)
}
程序编译/运行正常,但在查看模板的html输出时

{{.}}
{{range .}}
    <div>{{.threadID}}</div>
    <h3>{{.subject}}</h3>
    <h3>{{.name}}</h3>
    <div>{{.date_posted}}</div>
    <div><p>{{.text}}</p></div>
    <br /><br />
{{end}}

这并不直观,但模板(以及JSON等编码包)无法访问未报告的数据成员,因此您必须以某种方式导出它们:

选择1 选择2
更新模板 (无论您从上面选择了哪个选项,此部分都是强制性的)

{.}
{{range.}}
{{.ThreadID}
{{.Subject}
{{.Name}
{{.DatePosted}}
{{.Text}



{{end}

这应该是可行的。

您不能从模板中访问私有结构字段。IIRC该限制已明确记录。谢谢!谢谢。
// directly export fields
type Post struct {
    ThreadID int
    Subject, Name, Text, DatePosted string
}
// expose fields via accessors:
type Post struct {
    threadID int
    subject, name, text, date_posted string
}

func (p *Post) ThreadID()   int    { return p.threadID    }
func (p *Post) Subject()    string { return p.subject     }
func (p *Post) Name()       string { return p.name        }
func (p *Post) Text()       string { return p.text        }
func (p *Post) DatePosted() string { return p.date_posted }
{{.}}
{{range .}}
    <div>{{.ThreadID}}</div>
    <h3>{{.Subject}}</h3>
    <h3>{{.Name}}</h3>
    <div>{{.DatePosted}}</div>
    <div><p>{{.Text}}</p></div>
    <br /><br />
{{end}}