¿Está bien dejar un canal Go abierto para siempre (nunca cierre el canal) si nunca verifico su estado? ¿Conducirá a pérdidas de memoria? ¿Está bien el siguiente código?
func (requestCh chan<- Request) GetResponse(data RequestData) Response {
reply := make(chan Response)
requestCh <- Request{data: data, replyCh: reply}
return <-reply
}
gc
y el autor degccgo
dichos canalesclose
no son necesarios, a menos que esté buscando unclose
. Eso es un consejo autorizado.Sí, está bien mantener un canal abierto. Como dice el libro del lenguaje de programación :
fuente
Sí, está bien dejar el canal abierto, y de hecho es típico. Un canal abierto no constituye una referencia al objeto del canal, por lo que no evita que se recolecte basura.
fuente
" Un principio general del uso de canales Go es no cerrar un canal desde el lado del receptor y no cerrar un canal si el canal tiene múltiples remitentes concurrentes " .
Como se mencionó claramente en la respuesta anterior, cada canal será GCed eventualmente una vez que esté marcado para la limpieza, por lo que está bien dejar el canal sin cerrar, la única diferencia que hará es que ese canal estará disponible
gc
después de algunos ciclos, tal vez si no cerrado explícitamenteTambién los artículos siguientes de este y esta muestra varias formas de cerrar un canal en el caso de 1: N, N: 1 o M: N (emisores: receptores)
fuente
Ir es basura recolectada, por lo que realmente no tienes que 'liberar' nada.
Existe la posibilidad de cerrar canales, pero se usa principalmente como - cerrar (canal) - decirle a la rutina (o programa principal) que no se enviará nada más en ese canal.
fuente