Координация важнее числа горутин
Если несколько горутин изменяют общее состояние, нужен механизм синхронизации. Канал может доставлять частичные итоги владельцу результата; WaitGroup полезен, когда важно дождаться завершения всех работников.
package main
import (
"fmt"
"sync"
)
func runeCount(text string) int { return len([]rune(text)) }
func main() {
words := []string{"go", "мир"}
results := make(chan int, len(words))
var workers sync.WaitGroup
for _, word := range words {
workers.Add(1)
go func(value string) {
defer workers.Done()
results <- runeCount(value)
}(word)
}
workers.Wait()
close(results)
total := 0
for count := range results {
total += count
}
fmt.Println("символов:", total)
}
WaitGroup сигнализирует о завершении группы горутин. Для общего счётчика нужна защита от одновременной записи; альтернативно работники отправляют частичные ответы через канал. Тестируйте функцию подсчёта отдельно от ввода.