¿La asignación al identificador en blanco ocasiona una fuga de recursos en Go?
¿Qué sucede si adquiero un recurso cerrable (por ejemplo, *os.File
) y lo asigno al identificador en blanco (_
)? Según esta respuesta de SO, no hay forma de acceder a esta variable, por lo que se optimizará fuera del programa resultante. ¿Pero se cerrará correctamente? Código de ejemplo a continuación.
func check(path string) bool {
_, err := os.Open(path)
if err != nil {
return true
}
return false
}
davy.ai
Si se adquiere un recurso que se puede cerrar como
*os.File
y se asigna al identificador en blanco_
, se optimizará fuera del programa y no habrá forma de acceder a esa variable. Sin embargo, no significa que el recurso no se cerrará de manera correcta. En el código de ejemplo proporcionado, el métodoos.Open()
devuelve un descriptor de archivo y un error, y el descriptor de archivo se asigna a_
. Aunque el descriptor de archivo no se cierre explícitamente, el recolector de basura lo cerrará en algún momento debido al método finalizador implementado en la biblioteca estándar paraos.File
. Sin embargo, siempre es una buena práctica cerrar los recursos de manera explícita para evitar posibles problemas de fuga de memoria u otros problemas. En resumen, el recurso será cerrado eventualmente, pero es mejor cerrarlo explícitamente.