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

猜你喜欢

转载自www.cnblogs.com/gpan/p/9919259.html