Как сделать синхронизацию рутин в 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
  • Вопрос задан
  • 346 просмотров
Решения вопроса 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
Ведущий разработчик – практик
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы