` code
func GetProvinceData(strtime string, cidlist []string) (map[string]int64, int64) {
//var ProvinceMap = map[string]int64{
// "北京市": 0,
// "上海市": 0,
// "天津市": 0,
// "重庆市": 0,
// "河北省": 0,
// "河南省": 0,
// "山东省": 0,
// "山西省": 0,
// "湖南省": 0,
// "湖北省": 0,
// "辽宁省": 0,
// "黑龙江省": 0,
// "吉林省": 0,
// "江苏省": 0,
// "浙江省": 0,
// "安徽省": 0,
// "福建省": 0,
// "江西省": 0,
// "云南省": 0,
// "广东省": 0,
// "四川省": 0,
// "贵州省": 0,
// "陕西省": 0,
// "甘肃省": 0,
// "青海省": 0,
// "海南省": 0,
// "台湾省": 0,
// "内蒙古自治区": 0,
// "广西壮族自治区": 0,
// "宁夏回族自治区": 0,
// "新疆维吾尔自治区": 0,
// "西藏自治区": 0,
// "香港特别行政区": 0,
// "澳门特别行政区": 0,
// "其他": 0,
//}
var ProvinceMap = map[string]int64{}
// 查询数据库的 IP 结果集
ipList,sum := ActiveGetIP(strtime, cidlist)
t1:= time.Now().Unix()
jobs:=make(chan string)
hand :=make(chan int)
//isWork :=make(chan bool)
var lock sync.Mutex
for w:=1;w<=10;w++{
go func(w int,jobs <-chan string,hand chan <-int){ //isWork chan<- bool
for ips:=range jobs{
//isWork <-true
provinceName := FromIPGetAddress(ips) // 通过ip获取省份名称,上海市/河南省
lock.Lock()
ProvinceMap[provinceName] += 1
lock.Unlock()
}
hand <-w
}(w,jobs,hand)
}
for _, data := range ipList {
jobs <- data.Ip
//<-isWork
}
close(jobs)
for a:=1;a<=10;a++{
<- hand
}
fmt.Println("消耗时间====:",time.Now().Unix()-t1)
return ProvinceMap, sum
}
`
更多评论
http://topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/sync.html#syncmap 并发安全的map写法希望可以帮你
#2