打开的文件(*os.File)在不主动关闭的情况下,会在什么时候关闭?

代码如下:

package main

import (
    "fmt"
    "io"
    "os"
)

func main() {
    f := openFile()
    useFile(f)
    useFile2(f)
}

func openFile() *os.File {
    //hello.txt 中的内容为 world
    f, _ := os.Open("hello.txt")
    return f
}

func useFile(f *os.File) {
    fmt.Println("第一次使用f")
    io.Copy(os.Stdout, f)
    fmt.Println()
}

func useFile2(f *os.File) {
    fmt.Println("第二次使用f")
    io.Copy(os.Stdout, f)
    fmt.Println()
}

输出:

第一次使用f
world
第二次使用f

在我第二次使用f(*os.File)的时候,f已经被关闭了,而我却并没有主动关闭它。
疑问如下:
打开的文件(os.File)在不主动关闭的情况下,会在什么时候关闭?*
如果是在使用一次之后自动关闭,那我还需不需要主动关闭它?
请大佬们帮我答疑解惑

阅读 4k
1 个回答

f并不是被你关闭了,只是第一次copy后,偏移已经移到文件末尾,所以第二次copy,读取不到内容
你可以在第二次copy前调用下f.Seek() 设置文件偏移

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题