我想将某些fmt.Print
语句保存到.txt文件中。
我不想存储所有打印状态。我可以这样做吗?
答案 0 :(得分:2)
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
file, err := os.Create("myfile")
if err != nil {
log.Fatal(err)
}
mw := io.MultiWriter(os.Stdout, file)
fmt.Fprintln(mw, "This line will be written to stdout and also to a file")
}
答案 1 :(得分:1)
对要保存到文件的呼叫使用fmt.Fprint()
方法。还有fmt.Fprintf()
和fmt.Fprintln()
。
这些函数将目标io.Writer
作为第一个参数,您可以将文件传递给*os.File
)。
例如:
f, err := os.Open("data.txt")
if err != nil {
log.Fatal(err)
}
defer f.Close()
fmt.Println("This goes to standard output.")
fmt.Fprintln(f, "And this goes to the file")
fmt.Fprintf(f, "Also to file, with some formatting. Time: %v, line: %d\n",
time.Now(), 2)
如果您希望所有fmt.PrintXX()
次调用转到您无法控制的文件(例如,您无法将其更改为fmt.FprintXX()
,因为它们是另一个库的一部分),您可能会更改暂时os.Stdout
,所以所有进一步的fmt.PrintXX()
调用都会写入您设置的输出,例如:
// Temporarily set your file as the standard output (and save the old)
old, os.Stdout = os.Stdout, f
// Now all fmt.PrintXX() calls output to f
somelib.DoSomething()
// Restore original standard output
os.Stdout = old