golang html 模板使用
有时后台开发人员需要将后台数据展示出来, 便于查看, 如果这个时候让前端配合写个页面,人力成本就比较大。自己也没有精力去熟悉响应的web框架。自己上手咯。
我需要展示的数据是表格的形式, 后台代码最终返回处理好的html就行, 但是需要展示的数据量太大,没办法手动写一个html. 此时就可以用到golang的html 模块了。 直接上代码吧.
实例代码
package main
import (
"encoding/json"
"fmt"
"github.com/gorilla/mux"
"html/template"
"net/http"
"time"
)
var htmlDevice = `<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NAC FingerBank</title>
</head>
<body>
<table border="1">
<caption>{{.Title}}</caption>
<tr>
<th>Mac</th>
<th>DeviceType</th>
<th>OsType</th>
</tr>
{{range .Device}}
<tr>
<td>{{.Mac}}</td>
<td>{{.DeviceType}}</td>
<td>{{.OsType}}</td>
</tr>
{{end}}
</table>
</body>
</html>`
type Items struct {
Message string `json:"message"`
Status string `json:"status"`
}
type DeviceData struct {
Mac string `json:"mac"`
DeviceType string `json:"device_type"`
OsType string `json:"osType"`
}
type ItemsHtml struct {
Title string `json:"message"`
Device [2]DeviceData `json:"device"`
}
func handleAllStats(res http.ResponseWriter, req *http.Request) {
var result Items
result.Status = "200"
result.Message = "ok"
var data ItemsHtml
data.Title = "结果"
data0 := DeviceData{
Mac: "1c:1b:0d:e6:42:2d",
DeviceType: "computer",
OsType: "windows",
}
data1 := DeviceData{
Mac: "0c:1b:3d:e6:42:3d",
DeviceType: "server",
OsType: "linux",
}
data.Device[0] = data0
data.Device[1] = data1
t, err := template.New("webpage").Parse(htmlDevice)
// 定义传入到模板的数据,并在终端打印
err = t.Execute(res, data)
if err != nil {
fmt.Println("html teplate err:", err)
result.Status = "500"
result.Message = err.Error()
outgoingJSON, _ := json.Marshal(result)
fmt.Fprint(res, string(outgoingJSON))
return
}
return
}
func main() {
var wait chan int
// Api
router := mux.NewRouter()
router.HandleFunc("/api/v1/nacfb/stats", handleAllStats).Methods("GET")
http.Handle("/", router)
srv := &http.Server{
Addr: "0.0.0.0:33335",
IdleTimeout: 5 * time.Second,
Handler: router,
}
srv.ListenAndServe()
<-wait
}
结果如下:
后续,后端再需要直观的展示一些数据, 就比较方便了。
小结
该实例既展示了html模板的使用,同时也简单说明了如何用go创建一个http服务。
此外,也让我明白一个困惑已久的问题: 同事经常会提到web框架。但我写后台代码时, http返回的经常时一个json数据, 为什么web端的同事会需要框架。 如测试代码中的handleAllStats函数, 失败时返回的那三个字段, 经常就是后台一些web服务数据交互的格式,但是展示到页面的数据,浏览器是需要解析html的,如何让业务逻辑和html“生成”,我想就是web框架需要做的吧。 后期会尝试分析一些简单的web框架, 如echo
参考文档:
http://www.01happy.com/golang-html-template/
有疑问加站长微信联系(非本文作者)