go 下面文件锁的处理
file 类型无法取消 gc 时文件关闭的 Finalizer
go 里创建一个 file 时,会默认设置一个 Finalizer,当这个 File 回收时触发,关闭文件 fd,防止 fd 泄露。
但是我们不能通过 runtime.SetFinalizer(file, nil) 取消 File fd 回收的逻辑。原因在于 File 创建的逻辑:
go 标准库里, runtime.SetFinalizer(f.file, (*file).close) 把 Finalizer 设置在私有对象 File.file 上了,外层用户如果仅仅在 File 上取消 Finalizer,当 GC 开始时,f.file 仍然会调用 close 进行处理。
又由于 f.file 是私有类型,外层用户是不能进行 runtime.SetFinalize
