如果我有我的main()
函數創建一個文件:Go:將文件指針傳遞給另一個函數?
output, err := os.Create("D:\\output.txt")
,我想一切使用被放入該文件的程序打印另一個函數:
output.WriteString(str)
我怎麼能傳遞一個指向該文件的指針,以便函數可以寫入該文件? 此外,有沒有其他方式我應該用一個字符串寫入文件,或WriteString
是succicient?
謝謝!
如果我有我的main()
函數創建一個文件:Go:將文件指針傳遞給另一個函數?
output, err := os.Create("D:\\output.txt")
,我想一切使用被放入該文件的程序打印另一個函數:
output.WriteString(str)
我怎麼能傳遞一個指向該文件的指針,以便函數可以寫入該文件? 此外,有沒有其他方式我應該用一個字符串寫入文件,或WriteString
是succicient?
謝謝!
有你的函數需要指針作爲使用*
類型修飾符的參數,只是通過你的文件對象,是因爲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")
簡單的定義,可以採取*File
指針作爲自變量的函數:
func Write(output *os.File) {
(...)
}
Write(&output) //call function.
}
你也可能希望確保該文件正在使用中端關閉:
defer output.Close()
謝謝,但我不得不使用* os,File如下所述! – Gambit2007
對! :)我已經更正了我的答案,以備將來參考。 – Esse
使用接口如io.Writer
是去。 Go的許多類型僅通過使用Write
方法來完成io.Writer
。 os.File
是這些類型之一。
好的謝謝!我實際上甚至不需要使用&符號,因爲os.Create已經返回了該變量的地址。另外,你知道我怎麼能「打印」一個新的文件行?當我使用「\ n」時,它在控制檯中效果很好,但是當我將它作爲字符串輸出到.txt文件時並不起作用 – Gambit2007
很好,你實際上在兩個答案中都發現了錯誤:)它完全是目的完成,哈哈。開個玩笑,我要解決這個問題。此外,在Windows上,如果您希望文件在記事本中正確顯示,您需要使用「\ r \ n」而不是「\ n」 – SirDarius
哈哈哈太棒了!再次感謝! – Gambit2007