這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
//html 檔案參見http://www.ieyebrain.com:8080/pts/src/master/package mainimport ("flag""net/http""io""strings""strconv")type ClientInfo struct {id intip stringname string}var (addr = flag.String("addr", ":9191", "pts master address")clients = make(map[int] ClientInfo)sn = 0)type Web struct {w http.ResponseWriterreq *http.Request }func newWeb(w http.ResponseWriter, req *http.Request) *Web {return &Web{w:w,req:req}}func (p *Web) getClientIp() string {r := p.req ip := r.Header.Get("X-Real-IP") if ip == "" { ip = strings.Split(r.RemoteAddr, ":")[0] } if ip == "[" { ip = "localhost" } return ip}func (p *Web) beginTag(tag string) {io.WriteString(p.w, "<" + tag + ">")}func (p *Web) endTag(tag string) {io.WriteString(p.w, "</" + tag + ">")}func (p *Web) tagVal(tag string, val string) {io.WriteString(p.w, "<" + tag + ">" + val + "</" + tag + ">")}func (p *Web) write(val string) {io.WriteString(p.w, val)}func (p *Web) htmlTmpl(title string, body string) {p.beginTag("html")p.beginTag("head")p.tagVal("title", title)p.endTag("head")p.write(body)p.endTag("body")p.endTag("html")}func listHandler(w http.ResponseWriter, req *http.Request) {web := newWeb(w,req)web.beginTag("html")web.beginTag("head")web.tagVal("title", "PTS Master")web.endTag("head")web.beginTag("body")web.beginTag("ul")for _,v := range clients {web.beginTag("li")web.write(strconv.Itoa(v.id))web.write(" : ")web.write(v.ip)web.endTag("li")}web.write(`<hr>`);web.write(`<a href="index.html">home</a>`);web.endTag("ul")web.endTag("body")web.endTag("html")}func loginHandler(w http.ResponseWriter, req *http.Request) {web := newWeb(w,req)req.ParseForm()id := sn //req.Form["id"]//name := req.Form["name"]ip := web.getClientIp()clients[id] = ClientInfo {id:id,name:ip,ip:ip}sn++web.htmlTmpl("LoginOK",`<a href="list">loginRecord</a>`)}func main() {flag.Parse()fileSvr := http.FileServer(http.Dir("html"))http.Handle("/",fileSvr) http.HandleFunc("/list", listHandler)http.HandleFunc("/login", loginHandler)err := http.ListenAndServe(*addr, nil)panic(err)}