, , , ConcurrentFrequency . , - :
func ConcurrentFrequency(l []string) chan FreqMap {
c := make(chan FreqMap)
go func() {
var wg sync.WaitGroup
wg.Add(len(l))
for _, s := range l {
go func(s string) {
defer wg.Done()
c <- Frequency(s)
}(s)
}
wg.Wait()
close(c)
}()
return c
}
, , , :
func main() {
m := make(FreqMap)
for v := range ConcurrentFrequency([]string{"foo", "bar","zoo"}) {
for k, v := range v {
m[k] += v
}
}
fmt.Println(m)
}
, :
for _, s := range l goroutines , , , "", , . , , wg.Done . , , , - . wg.Wait, goroutines , , , ConcurrentFrequency .
, ConcurrentFrequency, cannel , ( ) Frequency(s) .
source
share