2012-10-19 76 views
3

我正嘗試使用GO附帶的標準庫「encoding/csv」寫入到GO中的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) 
    } 
} 
+0

爲什麼你需要'文件,錯誤:= os.OpenFile( 「output.csv」,os.O_APPEND,0666)'行? – simonmenke

+0

我補充說,因爲我需要能夠追加到文件,並據我瞭解,當文件創建或打開它們設置爲只讀訪問。 – amedeiros

+0

我想我可以添加| os.O_CREATE如果該文件不存在,並跳過創建它。 – amedeiros

回答

6

有一個額外的標誌,如您呼叫os.OpenFile,而不是直接通過os.Create它通過爲O_RDWR您。您需要將O_RDWR或O_WRONLY與您的O_APPEND |一起傳遞O_CREATE標誌。

O_APPEND僅用於表示在寫入時應將寫入附加到文件的末尾,它不指定開放模式本身。

附加說明: 您正在使用「錯誤」作爲變量名,這其實是在圍棋一種,一般用於命名錯誤返回變量的成語是「犯錯」

6

您需要調用writer.Flush()writer.Write()

//from package documentation 

func (w *Writer) Flush() 
Flush writes any buffered data to the underlying io.Writer.