golang的http实现case

golang web初步理解与思考

golang的收获

  • 这里可以获知,可以实现一个简单的web页面来展示后台的数据,这里的数据是 111111 数据递增200, 222222数据递增10;
    • 数据的web展示, 展示的效果看html+css的样式过程
    • 可以进行post,提交前台的一些数据,这些数据可以修改为后台的参数
  • 通过 http.HandleFunc("/test1", SimpleServer1), 前面是url,后面是实现的函数, 实现的函数可以初步看成是数据处理;
  • go html template,对html的格式进行解析, 对常用的数据进行存放;

案例分析

  • http存在路由的说法, 其实可否理解为 http://ip:port/test2
  • http可以实现后台数据到前台的展示,虽然显示的有些简单,但结论可以定义为是css+icon的样子了;(需要分析一些html的格式)
  • golang中定义template.New("webpage").Parse(tpl), 其中tpl定义form的格式,里面重点是:
    • {{range .Items}}<div>{{ . }}</div>{{else}}
  • 在html中定义action, #, method, post; get 相关的方法需要实现;

package main

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

const form = `
	<html>
	<head>
	  <style>
	  table, th, td {
    	border: 1px solid green;
	  </style>
	</head>
	<body>
        <form action="#" method="post" name="bar">
            <input type="text" name="in" />
            <input type="submit" value="submit"/>
        </form>
	</body>
	
	</html>
`

const tpl = `
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
		<title>{{.Title}}</title>
		<style>    
			table, th, td {
			border: 1px solid green;
		</style>
		<script language="JavaScript">
		function myrefresh()
		{
   			window.location.reload();
		}
		setTimeout('myrefresh()',5000); //指定5秒刷新一次
		</script>
    </head>
    <body>
		
		<div><strong>no rows</strong></div>{{end}}
        <table>
        {{range .Items}}<div>{{ . }}</div>{{else}}
		<tr><th>Inst</th><th>count</th><th>rate</th><th>flag</th></tr>
		<tr><td>hello</td><td>200</td><td>70</td><td>true</td></tr>
		</table>
		<!-- 在这里定义表格,然后显示出机构成功率的状态 -->
    </body>
</html>`

type Inst struct {
	name string
	cnt  int
	rate int
	flag bool
}

type InstRate struct {
	Title string
	Items [5]Inst
}

var data InstRate
var i int
var t *template.Template

func init() {
    t, _ = template.New("webpage").Parse(tpl)
    data.Title = "Hello world"
	// check(err)
}

func check(err error) {
	if err != nil {
		fmt.Println(err)
	}
}
func SimpleServer1(w http.ResponseWriter, request *http.Request) {

	fmt.Println("SimpleServer1 start", time.Now())

	i++

	data.Items[0].name = "111111"
	data.Items[0].cnt = 200 + i*200
	data.Items[0].rate = 70
	data.Items[0].flag = true

	data.Items[1].name = "222222"
	data.Items[1].cnt = 500 + i*10
	data.Items[1].rate = 80
	data.Items[1].flag = true
	//	time.Sleep(time.Second * 5)

	fmt.Println("SimpleServer1 end", time.Now())

	err := t.Execute(w, data)
	check(err)
}

/* handle a simple get request */
func SimpleServer(w http.ResponseWriter, request *http.Request) {

	check := func(err error) {
		if err != nil {
			fmt.Println(err)
		}
	}

	t, err := template.New("webpage").Parse(tpl)
	check(err)

	data := struct { // 这里可以定义机构数据, 然后循环显示出机构的状态;
		Title string
		Items []string
	}{
		Title: "机构成功率",
		Items: []string{
			"222222",
			"111111",
		},
	}

	fmt.Println(data)

	err = t.Execute(w, data)
	check(err)

}

func FormServer(w http.ResponseWriter, request *http.Request) {
	w.Header().Set("Content-Type", "text/html")
	switch request.Method {
	case "GET":
		/* display the form to the user */
		io.WriteString(w, form)
	case "POST":
		/* handle the form data, note that ParseForm must
		   be called before we can extract form data */
		//request.ParseForm();
		//io.WriteString(w, request.Form["in"][0])
		io.WriteString(w, request.FormValue("in"))
	}
}

func main() {
	http.HandleFunc("/test1", SimpleServer1)
	http.HandleFunc("/test2", FormServer)
	if err := http.ListenAndServe(":8088", nil); err != nil {
		panic(err)
	}
}

posted @ 2018-11-06 22:15  学习成长  阅读(232)  评论(0编辑  收藏  举报