golang html template 使用

      有时后台开发人员需要将后台数据展示出来, 便于查看, 如果这个时候让前端配合写个页面,人力成本就比较大。自己也没有精力去熟悉响应的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

}

结果如下:

image

后续,后端再需要直观的展示一些数据, 就比较方便了。

小结

       该实例既展示了html模板的使用,同时也简单说明了如何用go创建一个http服务。
此外,也让我明白一个困惑已久的问题: 同事经常会提到web框架。但我写后台代码时, http返回的经常时一个json数据, 为什么web端的同事会需要框架。 如测试代码中的handleAllStats函数, 失败时返回的那三个字段, 经常就是后台一些web服务数据交互的格式,但是展示到页面的数据,浏览器是需要解析html的,如何让业务逻辑和html“生成”,我想就是web框架需要做的吧。 后期会尝试分析一些简单的web框架, 如echo

参考文档:

http://www.01happy.com/golang-html-template/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值