Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
12 / 7 / 9
Регистрация: 08.04.2017
Сообщений: 118
1

Как закрыть канал

25.03.2020, 11:14. Показов 544. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func parse(c chan<- Commentator, link string) {
 
    x, err := goquery.NewDocument(link)
 
    if err != nil {
        fmt.Println(err)
        return
    }
 
    var users, comments []string
    x.Find(".comment").Each(func(indexth int, element *goquery.Selection) {
        x.Find(".user-info__nickname_comment").Each(func(indexth int, element *goquery.Selection) {
            users = append(users, element.Text())
        })
        x.Find(".comment__message").Each(func(indexth int, element *goquery.Selection) {
            comments = append(comments, element.Text())
        })
    })
 
    for i, val := range users {
        c <- Commentator{val, comments[i], link}
    }
}
main:
Go
1
2
3
4
5
6
7
8
ch := make(chan Commentator, 5)
for _, link := range links {
        go parse(ch, link)
    }
 
    for val := range ch {
        println(val.String())
    }
Необходимо после того, как ссылки закончатся и горутины отработают - закрыть канал и завершить программу. Но я уже несколько часов сижу и не могу втуплить как в данном случае я могу закрыть канал правильно (не потеряв данные, которые еще не обработались и не словив панику при поптыке записать в закрытый канал).
Программа зависает в ожидании закрытия канала и все
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2020, 11:14
Ответы с готовыми решениями:

Канал, ширина которого 27 м, под прямым углом впадает в другой канал шириною 64 м. Какова наибольшая длина бревен, котор
Канал, ширина которого 27 м, под прямым углом впадает в другой канал шириною 64 м. Какова...

как сделать так,чтобы когда я нажимаю кнопку закрыть в правом верхнем углу выходило окно сообшение?(типа вы хотите закрыть программу/да или нет/)
как сделать так,чтобы когда я нажимаю кнопку закрыть в правом верхнем углу выходило окно...

4-х канал 1866 vs 2-х канал 2133
Здравствуйте, нигде не нашел информации по этому вопросу, может кто знает из вас, что будет...

Полевый транзисторы N канал и P канал
Здравствуйте. Обьясните пожалуйста по управлению полевыми транзисторами Как я понимаю...

1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
25.03.2020, 12:00 2
все рабочие рутины объединяйте с помощью sync.WaitGroup и ждите завершения:

C
1
2
wg.Wait()
close(out)
Если у вас есть пост-обработка, можно завести еще один канал который будет блокировать завершение программы пока крайняя порция не будет обработана:
C
1
2
done := make(chan struct{})
<-done
0
25.03.2020, 12:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2020, 12:00
Помогаю со студенческими работами здесь

К реке шириной a м построен под прямым углом канал шириной b м. Какой максимальной длины суда могут входить в этот канал
...канал* Как это можно решить?

Как организовать VPN канал?
Всем привет! (Админ я начинающий, так что если что то не правильно в постановке вопроса -...

Как раскрутить канал на YouTube?
Поделитесь советами пожалуйста, как раскрутить канал на ютубе? А то аудитория маленькая, но отзывы...

Как проверить канал связи?
Дано: шкаф с винпаком в одной комнате, шкаф с определенного рода платой в другой комнате....

Как создать свой канал в IP
Очень прошу помочь.

Вопрос: Как разделить канал.
Ситуация: Есть &quot;Высокоскоростное подключение&quot; к сети Интернет на 1 НоутБуке. Так же есть 2 ноута...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru