Подтвердить что ты не робот

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

Можно ли оставить канал Go открытым навсегда (никогда не закрывать канал), если я никогда не проверю его состояние? Это приведет к утечке памяти? Является ли следующий код ОК?

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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