dtgu21994537
2016-03-20 03:22
浏览 295
已采纳

在Golang中返回文件指针

I'm still struggling with the basics of Golang.

Consider the following sample code:

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
}

I would assume that calling:

fp := OpenOutputFile("output.txt")

would now make fp a file pointer (*os.File), so that I could call a statement like:

io.WriteString(fp, "Hello World")

In another function. But when calling this method, the error is generated:

0 write output.txt: bad file descriptor

So it appears that the pointer returned is not valid. How can I return a properly formed pointer to use with io.WriteString?

I appreciate the help!

Of note: Everything executes as intended when the creation of the file pointer and the writing to the file pointer exists in the same method. Breaking the logic into a function causes it to not behave as intended.

图片转代码服务由CSDN问答提供 功能建议

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

考虑一下 以下示例代码:

  func OpenOutputFile(名称字符串)(fp * os.File){
 fp,err:= os.Create(name)
 if err!  = nil {
 panic(err)
} 
 
延迟func(){
如果err:= fp.Close();  err!= nil {
 panic(err)
} 
}()
 
 return fp 
} 
   
 
 

我认为调用 :

  fp:= OpenOutputFile(“ output.txt”)
   
 
 

现在将使 fp 一个文件指针( * os.File ),这样我可以调用如下语句:

  io.WriteString(fp,  “ Hello World”)
   
 
 

在另一个函数中。 但是调用此方法时,会生成错误:

  0写output.txt:错误的文件描述符
   
 
 

因此,似乎返回的指针无效。

我如何才能返回正确格式的指针以与 io.WriteString 一起使用?

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

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题