Как сделать синхронизацию рутин в golang?

for results.Next() {
var amx Amx_servers
// for each row, scan the result into our tag composite object
err = results.Scan(&amx.Id, &amx.Serverip, &amx.Serverport)
if err != nil {
amx.Serverport = 0
}
//fmt.Println(amx.Serverip, amx.Serverport)
go gol(amx.Serverip, amx.Serverport, amx.Id)

//fmt.Println(amx.Id)

}

В цикле вызываю функцию gol через рутину go.
Цикл выводит 10000 записей. Выводит он их за пару секунд.
А вот функции gol нужно проделать некоторые действия. Подключиться к серверу, получить инфу. Плюс если сервер не отвечает, тайм аут 3 сек. Вообщем выполняется не все из списка.
Так вот, как реализовать синхронизацию, что бы пока все рутины не завершились, функция не закрывалась или как правильно не прекращала работу, поправьте если не так выразился. Я новичок в GO
  • Вопрос задан
  • 274 просмотра
Решения вопроса 2
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
sync.WaitGroup из stdlib
func WaitForWorkers(){
    var wg sync.WaitGroup
    for range{
        ...
        wg.Add(1)
        go gol(...)
    }
    wg.Wait()
}
func gol(...){
    ...
    wg.Done()
}
Ответ написан
VlastV
@VlastV
Ведущий разработчик – практик
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ELMA Санкт-Петербург
от 80 000 до 180 000 ₽
Reka.Market Иннополис
от 100 000 до 250 000 ₽
21 апр. 2021, в 22:50
50000 руб./за проект
21 апр. 2021, в 22:39
1000 руб./за проект
21 апр. 2021, в 22:19
13000 руб./за проект