Não há problema em deixar um canal Go aberto para sempre (nunca feche o canal) se eu nunca verificar seu estado? Isso levará a vazamentos de memória? O código a seguir está OK?
func (requestCh chan<- Request) GetResponse(data RequestData) Response {
reply := make(chan Response)
requestCh <- Request{data: data, replyCh: reply}
return <-reply
}
gc
e o autor dogccgo
digamos channelclose
s não são necessários, a menos que você esteja procurando umclose
. Esse é um conselho autoritário.Sim, não há problema em manter um canal aberto. Como o livro de linguagem de programação go declarou:
fonte
Sim, não há problema em deixar o canal aberto e, de fato, é típico. Um canal aberto não constitui uma referência ao objeto do canal e, portanto, não impede que seja coletado como lixo.
fonte
" Um princípio geral do uso de canais Go é não fechar um canal do lado do receptor e não fechar um canal se o canal tiver vários remetentes simultâneos " .
Como mencionado claramente na resposta acima, como todos os canais serão GCed eventualmente depois de marcados para limpeza, não há problema em deixar o canal não fechado. A única diferença que fará é que esse canal estará disponível por
gc
alguns ciclos, talvez se não fechado explicitamente.Também os seguintes artigos esta e esta mostra várias maneiras para fechar um canal em caso de 1: N, N: 1 ou H: N (remetentes: receptores)
fonte
Go é lixo coletado, para que você realmente não precise "libertar" nada.
Existe a possibilidade de fechar canais, mas é usado principalmente como - close (canal) - diz à goroutine (ou programa principal) que nada mais será enviado nesse canal.
fonte