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)
}
}