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

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 に答える
7

O_RDWR を渡す os.Create を介してではなく、直接 os.OpenFile を呼び出しているため、追加のフラグがあります。O_APPEND と共に O_RDWR または O_WRONLY を渡す必要があります。O_CREATE フラグ。

O_APPEND は、書き込み時に書き込みをファイルの最後に追加する必要があることを示すためにのみ使用され、オープンモード自体を指定しません。

追加の注意: 変数名として「エラー」を使用しています。これは実際には Go の型です。エラー戻り変数の名前付けに一般的に使用されるイディオムは「err」です。

于 2012-10-19T15:14:56.860 に答える
3

os.Createソースドキュメントからわかるように、書き込み可能なファイルを開きます

于 2012-10-19T14:44:07.923 に答える