2016-04-08 88 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是這些類型之一。