Jam*_*lor 6 pointers go

我仍在努力学习 Golang 的基础知识。

考虑以下示例代码:

func OpenOutputFile(name string) (fp *os.File) {
  fp, err := os.Create(name)
  if err != nil {
      panic(err)
  }

  defer func() {
      if err := fp.Close(); err != nil {
          panic(err)
      }
  }()

  return fp
}
Run Code Online (Sandbox Code Playgroud)

我会假设调用:

fp := OpenOutputFile("output.txt")
Run Code Online (Sandbox Code Playgroud)
fp*os.File
io.WriteString(fp, "Hello World")
Run Code Online (Sandbox Code Playgroud)

在另一个函数中。但是调用这个方法的时候,报错:

0 write output.txt: bad file descriptor
Run Code Online (Sandbox Code Playgroud)
io.WriteString

我感谢您的帮助!

注意:当文件指针的创建和文件指针的写入存在于同一方法中时,一切都会按预期执行。将逻辑分解为函数会导致其行为不符合预期。