golang html template 使用

he的博客 · · 1308 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

}

结果如下:

image

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

小结

该实例既展示了html模板的使用,同时也简单说明了如何用go创建一个http服务。

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

参考文档:

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:he的博客

查看原文:golang html template 使用

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1308 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传