簡體   English   中英

從掃描儀轉換為io.Reader的慣用方式

[英]Idiomatic way to convert from a scanner to a io.Reader

我最近遇到了這樣一個問題:如何從CSV文件讀取,對每行進行一些轉換並寫入HTTP請求。

我面臨的問題是如何從逐行讀取器(它返回任意數量的字節(如掃描儀))轉換為字節讀取器,該讀取器在每次調用Read()時都返回固定數量的字節。

我想到的最好的解決方案是構建一個自定義io.Reader,它將從掃描器讀取並在不適合的情況下在本地緩沖字節。 然后,在下次調用Read()時將返回緩沖的字節。

這是我想出的: https : //gist.github.com/paulsc/6a0bf30a2a8d898f7a8086aedf6af1e1

直覺上,這感覺像是一個錯誤的解決方案,因為代碼似乎是一個相當底層的解決方案,可能已經在標准庫中了。

有沒有更好的方法,更慣用標准go組件呢?

一種簡單的方法是使用io.Pipe

func ScannerToReader(scanner *bufio.Scanner) io.Reader {
    reader, writer := io.Pipe()


    go func() {
        defer writer.Close()
        for scanner.Scan() {
            writer.Write(scanner.Bytes())
        }
    }()

    return reader
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM