go语言实战-----26-----简单Web模板

一 简单Web模板

在http服务器使用简单Web模板可以方便我们快速进行web相关的开发。例如给多个用户进行邮件的发送,一些程序的报警信息等等,这时模板的便捷性就体下出来。

package main

import (
	"fmt"
	"html/template"
	"net/http"
)

// 全局的html模板变量
var myTemplate *template.Template

type Result struct {
	output string
}

// 实现Write方法,提供给io.WriteString调用。
func (p *Result) Write(b []byte) (n int, err error) {
	fmt.Println("called by template")
	p.output += string(b)
	return len(b), nil
}

// 用于导入html模板实际数据的结构体,必须要与模板对应,否则可能出现未知问题,例如解析不了。
type Person struct {
	Name  string
	Title string
	Age   int
}

func userInfo(w http.ResponseWriter, r *http.Request) {

	// 1. 使用实际的数据去填充html模板。
	var arr []Person
	p := Person{Name: "tyy", Age: 18, Title: "信息1"}
	p1 := Person{Name: "lqq", Age: 19, Title: "信息2"}
	p2 := Person{Name: "hc", Age: 20, Title: "信息3"}
	arr = append(arr, p)
	arr = append(arr, p1)
	arr = append(arr, p2)

	fmt.Println("arr:", arr)

	// 2. 开始解析,并会自行写入到w http.ResponseWriter,这样客户端就能读取到。
	//resultWriter := &Result{}
	//io.WriteString(resultWriter, "hello 模板") // io.WriteString:将参2的内容写入参1。它接收一个字节切片,所以传入字符串指针是没有问题的(看注释)。
	err := myTemplate.Execute(w, arr) // 模板替换, 流程猜想应该是:首先利用hmtl模板,将arr的内容导入的模板实例,然后写入到w http.ResponseWriter中。
	if err != nil {
		fmt.Println(err)
	}
	//fmt.Println("template render data:", resultWriter.output)
}

func initTemplate(filename string) (err error) {
	myTemplate, err = template.ParseFiles(filename)
	if err != nil {
		fmt.Println("parse file err:", err)
		return
	}
	return
}

func main() {

	// 1. 打开html文件并解析模块。
	initTemplate("./index.html")

	// 2. 监听http服务。
	http.HandleFunc("/user/info", userInfo)
	err := http.ListenAndServe("0.0.0.0:9000", nil)
	if err != nil {
		fmt.Println("http listen failed")
	}

}

index.html:

<html>
    <!-- table是一个表,一个tr代表一行。td代表一行中的单元。单元里面的数据可以是图片、文字等等 -->
    <head>
    </head>
    <body>
        <p>hello world</p>
        <table border="1">
        {{range .}}
            <tr>
                <td>{{.Name}}</td> <td>{{.Age}}</td><td>{{.Title}}</td>
            </tr>
         {{end}}
        </table>
    </body>
</html>

结果看到,只有有了模板,我们想导入数据,只需要创建对应的结构体实例即可,非常方便。例如我们每天每隔一个小时要向某些人推送重要服务器的告警信息,那么我们可以使用Web模板,将每个小时对应的信息导入到模板,然后进行发送即可,而不需要每次都自己组织结构再发送,这就是Web模板的便捷性。
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值