package mux import ( "fmt" "net/http" "sort" "strconv" "time" ) type connLog struct { startTime time.Time isClose bool logs []string } var m map[int]*connLog var copyMap map[int]*connLog func deepCopyMap() { copyMap = make(map[int]*connLog) for k, v := range m { copyMap[k] = &connLog{ startTime: v.startTime, isClose: v.isClose, logs: v.logs, } } } //func init() { // m = make(map[int]*connLog) // m[0] = &connLog{ // startTime: time.Now(), // isClose: false, // logs: []string{"111", "222", "333"}, // } // m[1] = &connLog{ // startTime: time.Now(), // isClose: false, // logs: []string{"111", "222", "333", "444"}, // } // m[2] = &connLog{ // startTime: time.Now(), // isClose: true, // logs: []string{"111", "222", "333", "555"}, // } //} type IntSlice []int func (s IntSlice) Len() int { return len(s) } func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] } func NewLogServer() { http.HandleFunc("/", index) http.HandleFunc("/detail", detail) http.HandleFunc("/stash", stash) fmt.Println(http.ListenAndServe(":8899", nil)) } func stash(w http.ResponseWriter, r *http.Request) { deepCopyMap() w.Write([]byte("ok")) } func index(w http.ResponseWriter, r *http.Request) { var keys []int for k := range copyMap { keys = append(keys, k) } sort.Sort(IntSlice(keys)) var s string for v := range keys { connL := copyMap[v] s += "" + strconv.Itoa(v) + "----------" s += strconv.Itoa(int(time.Now().Unix()-connL.startTime.Unix())) + "s----------" s += strconv.FormatBool(connL.isClose) s += "
" } w.Write([]byte(s)) } func detail(w http.ResponseWriter, r *http.Request) { id := r.FormValue("id") i, _ := strconv.Atoi(id) v, _ := copyMap[i] var s string for _, vv := range v.logs { s += "

" + vv + "

" } w.Write([]byte(s)) }