Можно ли оставить канал открытым?


можно ли оставить канал Go открытым навсегда (никогда не закрывать канал), если я никогда не проверяю его состояние? Приведет ли это к утечкам памяти? Следующий код в порядке?

func (requestCh chan<- Request) GetResponse(data RequestData) Response {
    reply := make(chan Response)
    requestCh <- Request{data: data, replyCh: reply}
    return <-reply
}
4 96

4 ответа:

Это нормально, чтобы оставить канал Go открытым навсегда и никогда не закрывать его. Когда канал больше не используется, он будет собирать мусор.

обратите внимание, что стоит только закрыть канал, если приемник ищу близкого человека. Закрытие канала является управляющим сигналом на канал, указывающий, что больше никаких данных не следует.

Вопрос Дизайна: Закрытие Канала

Да, это нормально, чтобы держать канал открытым. Как язык программирования go книги указано:

вам не нужно закрывать каждый канал, когда вы закончите с ним. это нужно только закрыть канал, когда важно сказать получение goroutines, что все данные были отправлены. канал, что сборщик мусора определяет, чтобы быть недоступным будет иметь свой ресурсы восстановлены независимо от того, закрыт он или нет. (Не надо путать это с помощью операции закрытия для открытых файлов. Это важно для вызова закрыть способ на каждый файл, Когда вы закончите с ним.)

Да, это нормально, чтобы оставить канал открытым, и на самом деле это типично. Открытый канал не является ссылкой на объект канала и поэтому не препятствует его сбору мусора.

Go-это собранный мусор, поэтому вам действительно не нужно ничего "освобождать".

есть возможность закрыть каналы, но он в основном используется как - close(канал) - скажите goroutine (или основной программе), что ничего больше не будет отправлено на этом канале.