package main import ( "time" "sync" "fmt" "sync/atomic" ) type Ban struct { visitIPs map[string]struct{} //这个是什么意思 } func NewBan() *Ban{ return &Ban{visitIPs:make(map[string]struct{})} } //判断ip是否存在 func (o *Ban) visit(ip string)bool{ mapMutex.Lock() defer mapMutex.Unlock() if _, ok :=o.visitIPs[ip];ok{ return true } o.visitIPs[ip]= struct{}{} go o.invalidAfter1Min(ip) return false } func (o *Ban) invalidAfter1Min(ip string){ time.Sleep(time.Minute *1) mapMutex.Lock() visitIPs :=o.visitIPs delete(visitIPs,ip) o.visitIPs=visitIPs mapMutex.Unlock() } var mapMutex *sync.Mutex //声明锁 func main(){ mapMutex =new(sync.Mutex) //创建一个锁 var success int64 //声明 ban :=NewBan() wg :=new(sync.WaitGroup) for i :=0;i<1000;i++{ for j :=0;j<1000;j++{ wg.Add(1) //fmt.Println('j',j) fmt.Println(j) ipEnd :=j go func() { defer wg.Done() ip :=fmt.Sprintf("192.168.1.%d",ipEnd) //fmt.Println(ipEnd) if !ban.visit(ip){ atomic.AddInt64(&success,1) } }() } } wg.Wait() fmt.Println("success:",success) }