golang的http實現case
阿新 • • 發佈:2018-11-06
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) } }