Go 转到网页模板为空

Go 转到网页模板为空,go,Go,我编写了这个Go-Lang代码,用于通过Go程序将模板和值传递给参数,为web页面提供服务 // +build package main import ( "html/template" "io/ioutil" "net/http" ) type Blog struct { title string heading string para string } func loadfile(filename string) (string,

我编写了这个Go-Lang代码,用于通过Go程序将模板和值传递给参数,为web页面提供服务

// +build

package main

import (
    "html/template"
    "io/ioutil"
    "net/http"
)
type Blog struct {
    title   string
    heading string
    para    string
}
func loadfile(filename string) (string, error) {
    byte, err := ioutil.ReadFile(filename)
    return string(byte), err
}
func handler(w http.ResponseWriter, r *http.Request) {
    blog := Blog{title: "GoLang", heading: "WebServer", para: "coding"}
    t, err := template.ParseFiles("test.html")
    fmt.Println(err)
    t.Execute(w, blog)
}
func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":9000", nil)
}
HTML模板文件名为test.HTML,如下所示

<html>
<head>
<title>{{.title}}</title>
</head>
<body>

<h1>{{.heading}}</h1>
<p>{{.para}}</p>

</body>
</html> 

{{.title}
{{标题}
{{.para}}


当我执行程序时,问题是所服务的页面显示为空白。要传递给模板的参数不会显示在呈现的页面上。我甚至打印了错误,但没有错误

您应该用大写字母书写
博客
字段的第一个字母,以使其公开

type Blog struct {
    Title   string
    Heading string
    Para    string
}
您还可以将映射传递给方法
Execute()
,如下所示:

b := map[string]string{
    "title": "GoLang",
    "heading": "WebServer",
    "para": "coding",
}
t.Execute(w, b)

非常感谢你。我不知道非资本使变量私有化。因此,这里有一个问题-如果struct的变量是私有的,我们只能在struct的函数中使用它们?如果字段是私有的,则仅在包范围内可见,在您的示例中,它可以在主包内的任何文件中访问,但因为
t.Execute()
位于其他包装中,因此无法访问字段。这就是私有:小写,公有:大写的封装方式