2015-12-03 45 views
0

我在遍歷通道時將行寫入csv文件時出現問題。我是Go新手,但文件IO的語法與我同步。鑑於我期望寫操作成功返回將表明寫操作已完成,但這不是我所觀察到的。這基本上就是我在我的應用程序已事情是:Go文件在迭代通道時寫入IO失敗

package main 

import (
    "encoding/csv" 
    "log" 
    "os" 
) 

func main() { 
    file, err := os.Create("test.csv") 
    if err != nil { 
     log.Fatalf("Error opening file: %s", err.Error()) 
    } 
    defer file.Close() 

    writer := csv.NewWriter(file) 
    channel := make(chan []string) 
    counter := 0 

    go func() { 
     defer close(channel) 

     for i := 0; i < 100; i++ { 
      channel <- []string{"col1", "col2"} 
     } 
    }() 

    for vals := range channel { 
     if err := writer.Write(vals); err != nil { 
      log.Fatalf("Error writing to csv: %s", err.Error()) 
     } 
     counter++ 
    } 

    log.Printf("%d lines written", counter) 
} 

有通過通道進入例行的傳球值,而我遍歷這些值,並將其寫入到一個CSV文件。我沒有得到任何錯誤,最後它記錄了100行已被寫入。

當我檢查CSV文件雖然它是空的。我在我的應用程序中看到的行爲是文件寫入不完整;它會通過寫一條記錄而中途停止。我確定我錯過了一些東西,但是如果寫入沒有錯誤返回,爲什麼文件中沒有任何內容?

回答

3

您在函數結束時缺少writer.Flush()

更多信息here

+0

感謝隊友。很長一段時間,我的頭靠在牆上。爲什麼它會在我的應用程序中寫入一些文件內容? –

+0

nvm,我在你發佈的鏈接中看到有關緩衝的一點。再次感謝。 –