【问题标题】:Go WriteString function panicking?去 WriteString 函数恐慌?
【发布时间】:2021-09-15 18:05:16
【问题描述】:
func FileFill(filename string) error {
    f, err := os.Open("file.txt")
    if err != nil {
        panic("File not opened")
    }
    defer f.Close()

    for i := 0; i < 10; i++ {
        //I know this should have some error checking here
        f.WriteString("some text \n")
    }
    return nil
}

您好,我刚开始学习 Go,我一直在尝试一些小的用例来更好地学习它。我做了这个函数来用“一些文本”填充文件的 10 行。当我通过错误检查尝试此操作时,程序在 WriteString 行出现恐慌。我在这里误解了一些基本的东西吗?我查看了文档,但无法弄清楚为什么它不喜欢这个。谢谢。

【问题讨论】:

  • File.WriteString() 不会恐慌,但它会返回一个 error,您应该检查它。如果您感到恐慌,请提供输出,以便我们查看恐慌所在。
  • 另请注意os.Open() 打开文件仅供读取,因此您无法写入。使用os.Create() 打开文件以进行写入
  • 感谢@izca 的解释

标签: file go io


【解决方案1】:
// Choose the permit you want with os.OpenFile flags
file, err := os.OpenFile(path, os.O_RDWR, 0644) 

// or crate new file if not exist
file, err = os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0755)

// or append new data into your file with O_APPEND flag
file, err = os.OpenFile(path, os.O_APPEND, 0755)

文档:https://pkg.go.dev/os#OpenFile

【讨论】:

  • 您好,在回答问题的时候,不仅要给出解决方案,还要解释为什么是解决方案。删除简短的注释(正如@Steven Penny 在他的回答中所做的那样)为什么需要os.Create() 并指向文档将大大改善您的答案。
  • 感谢您的来信。我会考虑的
【解决方案2】:
推荐的答案 Go Language

需要使用具有写入或附加权限的函数:

package main
import "os"

func main() {
   f, err := os.Create("file.txt")
   if err != nil {
      panic(err)
   }
   defer f.Close()
   for range [10]struct{}{} {
      f.WriteString("some text\n")
   }
}

https://golang.org/pkg/os#Create

【讨论】:

  • 感谢您的帮助!不知道那里的区别
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-27
  • 2015-08-05
  • 2013-11-21
  • 2021-09-21
相关资源
最近更新 更多