Можно ли оставлять канал Go открытым всегда (никогда не закрывать канал), если я никогда не проверю его состояние? Приведет ли это к утечкам памяти? Следующий код в порядке?
func (requestCh chan<- Request) GetResponse(data RequestData) Response {
reply := make(chan Response)
requestCh <- Request{data: data, replyCh: reply}
return <-reply
}
gc
и автор,gccgo
скажем, каналаclose
s не нужны, если вы не ищете aclose
. Это авторитетный совет.Да, нормально держать канал открытым. Как написано в книге по языку программирования go :
источник
Да, нормально оставлять канал открытым, и на самом деле это типично. Открываемый канал не является ссылкой на объект канала и не препятствует его сборке.
источник
« Один общий принцип использования каналов Go - не закрывать канал со стороны получателя и не закрывать канал, если канал имеет несколько одновременных отправителей ».
Как ясно сказано в ответе выше, каждый канал будет в конечном итоге GCed после того, как он будет помечен для очистки, поэтому можно оставить канал закрытым, единственное отличие, которое он будет иметь, состоит в том, что этот канал будет доступен
gc
после нескольких циклов, возможно, если не закрыт явноТакже в следующих статьях это и это показывают различные способы закрытия канала в случае 1: N, N: 1 или M: N (отправители: получатели)
источник
Go - это сборщик мусора, поэтому вам не нужно ничего «освобождать».
Существует возможность закрытия каналов, но в основном она используется как - close (channel) - сообщает goroutine (или основной программе), что на этом канале больше ничего не будет отправлено.
источник