2016-04-08 89 views
1

如果我有我的main()函数创建一个文件:Go:将文件指针传递给另一个函数?

output, err := os.Create("D:\\output.txt") 

,我想一切使用被放入该文件的程序打印另一个函数:

output.WriteString(str) 

我怎么能传递一个指向该文件的指针,以便函数可以写入该文件? 此外,有没有其他方式我应该用一个字符串写入文件,或WriteString是succicient?

谢谢!

回答

3

有你的函数需要指针作为使用*类型修饰符的参数,只是通过你的文件对象,是因为os.Create已经返回一个指针:

func WriteStringToFile(f *os.File) { 
    n, err := f.WriteString("foobar") 
} 

// .. 

output, err := os.Create("D:\\output.txt") 
WriteStringToFile(output) 

而且,请注意,不错的做法是不要忽略错误。

要将字符串写入文件可以通过几种不同的方式完成,特别是如果您想避免直接使用os.File对象,并且只使用io.Writer接口。例如:

fmt.Fprint(output, "foo bar") 
+0

好的谢谢!我实际上甚至不需要使用&符号,因为os.Create已经返回了该变量的地址。另外,你知道我怎么能“打印”一个新的文件行?当我使用“\ n”时,它在控制台中效果很好,但是当我将它作为字符串输出到.txt文件时并不起作用 – Gambit2007

+0

很好,你实际上在两个答案中都发现了错误:)它完全是目的完成,哈哈。开个玩笑,我要解决这个问题。此外,在Windows上,如果您希望文件在记事本中正确显示,您需要使用“\ r \ n”而不是“\ n” – SirDarius

+0

哈哈哈太棒了!再次感谢! – Gambit2007

2

简单的定义,可以采取*File指针作为自变量的函数:

func Write(output *os.File) { 
(...) 
} 

Write(&output) //call function. 

}

你也可能希望确保该文件正在使用中端关闭:

defer output.Close() 
+0

谢谢,但我不得不使用* os,File如下所述! – Gambit2007

+0

对! :)我已经更正了我的答案,以备将来参考。 – Esse

2

使用接口如io.Writer是去。 Go的许多类型仅通过使用Write方法来完成io.Writeros.File是这些类型之一。