You might pass an os.File or a network connection as an io.Reader or io.Writer to something that might keep it. The GC actually has an extension to
sorta have destructors to help with leaking fd's from forgotten os.File's (runtime.SetFinalizer).
However, having coded Go for quite a few years by now, I haven't found it to be an issue at all.