How to write multiple lines into a text file using golang

huangapple go评论100阅读模式
英文:

How to write multiple lines into a text file using golang

问题

我正在尝试将错误写入文本文件。然而,我似乎无法弄清楚为什么它不会打印多个错误。它只会打印最新的错误。

  1. for {
  2. if resp.StatusCode == 200 {
  3. ...
  4. break
  5. } else {
  6. data := fmt.Sprintf("[" + time.Now().Format("15:04:05") + "] " + strconv.Itoa(resp.StatusCode) + string(body) + "\n")
  7. file, err := os.Open("assets/errors.txt")
  8. if err != nil {
  9. fmt.Println(err)
  10. }
  11. write := bufio.NewWriter(file)
  12. write.WriteString(data)
  13. write.Flush()
  14. }
英文:

I'm trying to write errors into a text file. However, I can't seem to figure out why it's not printing multiple errors. It just prints the latest one.

  1. for {
  2. if resp.StatusCode == 200 {
  3. ...
  4. break
  5. } else {
  6. data := fmt.Sprintf("[" + time.Now().Format("15:04:05") +"] " + strconv.Itoa(resp.StatusCode) + string(body) + "\n")
  7. file, err := os.Open("assets/errors.txt")
  8. if err != nil {
  9. fmt.Println(err)
  10. }
  11. write := bufio.NewWriter(file)
  12. write.WriteString(data)
  13. write.Flush()
  14. }

答案1

得分: 1

我建议你创建一个函数来实现这个功能,就像这样简单的代码:

  1. func LogErrors(errors []error, filePath string) error {
  2. f, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
  3. if err != nil {
  4. return err
  5. }
  6. writer := bufio.NewWriter(f)
  7. for _, e := range errors {
  8. writer.WriteString(e.Error())
  9. writer.WriteString("\n")
  10. }
  11. writer.Flush()
  12. return nil
  13. }

你可以像这样使用它:

  1. func main() {
  2. t := time.Now()
  3. filePath := fmt.Sprintf("/tmp/log-%s", t.Format("2006-01-02_15_04_05"))
  4. es := []error{
  5. errors.New("something is bad"),
  6. errors.New("another error fix it"),
  7. }
  8. LogErrors(es, filePath)
  9. }
英文:

I would like suggest you creating a function for that, as simple like:

  1. func LogErrors(errors []error, filePath string) error {
  2. f, err := os.OpenFile(filePath, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
  3. if err != nil {
  4. return err
  5. }
  6. writer := bufio.NewWriter(f)
  7. for _, e := range errors {
  8. writer.WriteString(e.Error())
  9. writer.WriteString("\n")
  10. }
  11. writer.Flush()
  12. return nil
  13. }

And you can use it like:

  1. func main() {
  2. t := time.Now()
  3. filePath := fmt.Sprintf("/tmp/log-%s", t.Format("2006-01-02_15_04_05"))
  4. es := []error{
  5. errors.New("something is bad"),
  6. errors.New("another error fix it"),
  7. }
  8. LogErrors(es, filePath)
  9. }

huangapple
  • 本文由 发表于 2021年12月30日 04:57:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/70524937.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定