跟老男孩学GO语言之模板渲染
 老男孩IT教育
老男孩IT教育
 常见问题
常见问题
 2021年6月15日 17:40
2021年6月15日 17:40
template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。
template包(html/template)实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。本包提供了和text/template包相同的接口,无论何时当输出是HTML的时候都应使用本包。
func New(name string) *Template
创建一个名为name的模板。
func (t *Template) Parse(src string) (*Template, error)
Parse方法将字符串text解析为模板。嵌套定义的模板会关联到最顶层的t。
Parse可以多次调用,但只有第一次调用可以包含空格、注释和模板定义之外的文本。如果后面的调用在解析后仍剩余文本会引发错误、返回nil且丢弃剩余文本;如果解析得到的模板已有相关联的同名模板,会覆盖掉原模板。
func (t *Template) Execute(wr io.Writer, data interface{}) error
Execute方法将解析好的模板应用到data上,并将输出写入wr。如果执行时出现错误,会停止执行,但有可能已经写入wr部分数据。模板可以安全的并发执行。
func ParseFiles(filenames ...string) (*Template, error)
ParseFiles函数创建一个模板并解析filenames指定的文件里的模板定义。返回的模板的名字是第一个文件的文件名(不含扩展名),内容为解析后的第一个文件的内容。至少要提供一个文件。如果发生错误,会停止解析并返回nil。
渲染终端
模板渲染终端
模板替换 {{.字段名}}
package main
import (
    "fmt"
    "html/template"
    "os"
)
type Oldboy struct {
    Name   string
    Slogan string
}
func main() {
    // 声明模板内容
    const tpl = `
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
        <p>Name:{{.Name}}</p>
        <p>Slogan:{{.Slogan}}</p>
    </body>
</html>`
    // 创建一个新的模板,并且载入内容
    t, err := template.New("oldboy").Parse(tpl)
    if err != nil {
        fmt.Println(err)
    }
    data := Oldboy{
        Name:   "oldboy",
        Slogan: "老男孩IT教育,只培养技术精英。",
    }
    err = t.Execute(os.Stdout, data)
    if err != nil {
        fmt.Println(err)
    }
}
渲染存储文件
模板渲染存储文件
package main
import (
    "fmt"
    "html/template"
    "os"
)
type Oldboy struct {
    Name   string
    Slogan string
}
// 声明模板内容
const tpl = `
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
        <p>Name:{{.Name}}</p>
        <p>Slogan:{{.Slogan}}</p>
    </body>
</html>`
func main() {
    // 创建一个新的模板,并且载入内容
    t, err := template.New("oldboy").Parse(tpl)
    if err != nil {
        fmt.Println(err)
    }
    data := Oldboy{
        Name:   "oldboy",
        Slogan: "老男孩IT教育,只培养技术精英。",
    }
    file, err := os.OpenFile("./oldboy.dat", os.O_CREATE|os.O_WRONLY, 0755)
    if err != nil {
        fmt.Println("open failed err:", err)
        return
    }
    err = t.Execute(file, data)
    if err != nil {
        fmt.Println(err)
    }
}
渲染浏览器
目录结构:
    oldboy
      |
       —— oldboy.go
      |
       —— oldboy.html
oldboy.html 代码如下:
<html>
    <head>
        <title>oldboy</title>
    </head>
    <body>
        <p>Name:{{.Name}}</p>
        <p>Slogan:{{.Slogan}}</p>
    </body>
</html>
oldboy.go 代码如下:
package main
import (
    "fmt"
    "html/template"
    "net/http"
)
type Oldboy struct {
    Name   string
    Slogan string
}
func main() {
    http.HandleFunc("/oldboy", oldboy)
    err := http.ListenAndServe("0.0.0.0:8888", nil)
    if err != nil {
        fmt.Println("http listen failed")
    }
}
func oldboy(w http.ResponseWriter, r *http.Request) {
    t, err := template.ParseFiles("./oldboy.html")
    if err != nil {
        fmt.Println("parse file err:", err)
        return
    }
    data := Oldboy{
        Name:   "oldboy",
        Slogan: "老男孩IT教育,只培养技术精英。",
    }
    t.Execute(w, data)
}
编译运行,然后在浏览器中输入 :
http://localhost:8888/oldboy
页面显示:
Name:oldboy
Slogan:老男孩IT教育,只培养技术精英。
form表单提交
package main
import (
    "io"
    // "log"
    "net/http"
)
const form = `<html><body><form action="#" method="post" name="bar">
                    <input type="text" name="in"/>
                    <input type="text" name="in"/>
                     <input type="submit" value="Submit"/>
             </form></body></html>`
func FormServer(w http.ResponseWriter, request *http.Request) {
    w.Header().Set("Content-Type", "text/html")
    switch request.Method {
    case "GET":
        io.WriteString(w, form)
    case "POST":
        request.ParseForm()
        io.WriteString(w, request.Form["in"][1])
        io.WriteString(w, "\n")
        io.WriteString(w, request.FormValue("in"))
    }
}
/*
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
    DefaultServeMux.HandleFunc(pattern, handler)
}
*/
func main() {
    http.HandleFunc("/test2", FormServer)
    if err := http.ListenAndServe(":8088", nil); err != nil {
    }
}
然后在浏览器中输入 :
http://localhost:8088/test2
页面显示:
两个输入框
第一个输入框输入:123
第二个输入框输入:456
提交表单
页面显示:
456 123
老男孩GO语言课程需要学什么?老男孩教育GO语言课程专为在职人员设计,内容丰富、紧凑,贴近企业实战,学完后即可拥有多年实战经验,真正满足企业用人需求。
推荐阅读:
 本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。
本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。
                     老男孩教育专注IT教育10余年,只培养IT技术精英
老男孩教育专注IT教育10余年,只培养IT技术精英 全国免费咨询电话(渠道合作):400-609-2893
全国免费咨询电话(渠道合作):400-609-2893 
                     
                     
                            

 
                        









 
         
                         
                         扫码加入Python学院讨论学习群
扫码加入Python学院讨论学习群 
                            
                         最新文章
最新文章 
                                         
                                         
                                        