3

我正在尝试使用 GO 附带的标准库“encoding/csv”写入 GO 中的 csv 文件。但是,没有任何内容被写入文件,也没有返回错误。下面是编写代码。地图中的值是字符串数组。感谢您提前提供任何帮助。

func writeErrors() {

    file, error := os.OpenFile("output.csv", os.O_APPEND|os.O_CREATE, 0666 )

    if error != nil {panic(error)}
    defer file.Close()

    // New Csv writer
    writer := csv.NewWriter(file)

    // Headers
    var new_headers = []string { "group_id", "account_id", "location_id", "payment_rating", "records_with_error" }
    returnError := writer.Write(new_headers)
    if returnError != nil {
        fmt.Println(returnError)
    }

    for key, value := range errors {
        returnError := writer.Write(value)
        if returnError != nil {
            fmt.Println(returnError)
        }
        fmt.Println("Writing: ", key, value)
    }
}
4

3 回答 3

7

还有一个附加标志,因为您直接调用 os.OpenFile 而不是通过 os.Create 为您传递 O_RDWR。您需要将 O_RDWR 或 O_WRONLY 与您的 O_APPEND | 一起传递。O_CREATE 标志。

O_APPEND 仅用于表示写入时应将写入内容附加到文件末尾,它本身并未指定打开模式。

附加说明:您使用“error”作为变量名,这实际上是Go中的一种类型,通常用于命名错误返回变量的成语是“err”

于 2012-10-19T15:14:56.860 回答
7

你需要打电话writer.Flush()writer.Write()

//from package documentation

func (w *Writer) Flush()
Flush writes any buffered data to the underlying io.Writer.
于 2013-03-26T14:47:14.627 回答
3

os.Create打开一个可写文件,可以从源代码文档中了解到

于 2012-10-19T14:44:07.923 回答