代码
 
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "sync"
)

var dirEngineChan sync.Map

func main() {

    dHandler := dagHandler{}
    http.Handle("/v1/dagScan", dHandler)

    cHandler := callbackHandler{}
    http.Handle("/v1/callback", cHandler)

    http.ListenAndServe(":8080", nil)
}

type callbackHandler struct{}

func (h callbackHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {

}

type dagHandler struct{}

func (h dagHandler) ServeHTTP(res http.ResponseWriter, req *http.Request) {
    dag := `{
        "345": [
            {
                "f": "5"
            },
            {
                "a": "2",
                "w": "4"
            },
            {
                "p": "5"
            }
        ]
    }`

    go dagScan(dag)

    failStr := "message"
    data := []byte(failStr)
    res.WriteHeader(200)
    res.Write(data)

}

func dagScan(dag string) {

    var m map[string][]map[string]string
    json.Unmarshal([]byte(dag), &m)

    dagChan := make(chan interface{})
    for dirID, engineIpList := range m {
        for _, engineIpMap := range engineIpList {
            var chanList []interface{}
            for engine, ip := range engineIpMap {
                dirEngineChan.Store(dirID+engine, dagChan)
                resultChan, _ := dirEngineChan.Load(dirID + engine)
                chanList = append(chanList, resultChan)
                fmt.Println(dirID)
                fmt.Println(engine)
                fmt.Println(ip)
            }
            for _, readChan := range chanList {
                dirEngineResult := <-readChan.(chan interface{})
                if dirEngineResult != "ok" {
                    //del chan
                    //del the element key dirID+engine of map
                    fmt.Println("del the element key dirID+engine of map")
                }

            }
            fmt.Println()
            fmt.Println()
        }

    }

    //all done
    //del chan
    //del the key dirID+engine element of map
    //del the element of table vs_dirs
    fmt.Println("del the element of table vs_dirs")

}