Согласно моему комментарию выше, создайте собственную структуру рабочего элемента:
type urlItem struct {
Name string
Url string
Err error
}
Используйте указатели, чтобы функция process()
могла обновить базовую структуру:
site_list := []*urlItem{
&urlItem{"site1", "https://www.aaaa", nil},
&urlItem{"site2", "https://www.bbbb", nil},
&urlItem{"site3", "https://www.cccc", nil},
&urlItem{"site4", "https://www.dddd", nil},
}
process()
может затем безопасно обновить свой конкретный рабочий элемент (без необходимости каких-либо мьютексов или синхронизации), поскольку каждая go -программа получает уникальный рабочий элемент.
func process(site *urlItem, maxChan chan bool, wg *sync.WaitGroup) { /* ... */ }
Затем подсчитайте go - процедура errors
в конце:
var failCount int
for _, v := range site_list {
if v.Err != nil {
failCount++
}
}
Пример игровой площадки