Even though Yannic's answer was really useful and appreciated, I ended up using io.Pipe() which looks simpler and more efficient (explained below):
<snip> rp, wp := io.Pipe() go func() { defer wp.Close() for i := range feederChan { fmt.Fprintln(wp, i) } }() r := csv.NewReader(rp) for { // keep reading a, err := r.Read() if err == io.EOF { break } // do stuff with 'a' // ... } </snip> The io.Pipe() is synchronous, and should be fairly efficient: it pipes data from writer to a reader; I fed the csv.NewReader() the reader part, and created a goroutine that drains the chan writing to the writer part. Thanks a lot. On Sun, Sep 16, 2018 at 1:25 AM Yannic Bonenberger < yan...@yannic-bonenberger.com> wrote: > You can use a bytes.Buffer to create a single csv.Reader and write the log > lines into that buffer. > The code will look roughly like this https://play.golang.org/p/gbCPwSsx5gy > . > However, depending on the implementation of strings.Reader and the level > of optimization the Go compiler does, your approach of creating a new > csv.Reader for every iteration might actually be faster and consume less > memory than my code. > > > Greetings all, > I have a channel of 'string', where each item is a single CSV log line > that I want to convert to columns using "encoding/csv" > Currently, I am creating a new csv.Reader at each iteration for each item, > which is much more work than it needs to be. > > <snip> > for i := range feederChan { > r := csv.NewReader(strings.NewReader(i)) > a := r.Read() > // Do stuff with a > // ... > } > </snip> > > I would really appreciate sharing with me if there's a way to iterate > through a 'chan string' using 'csv.Reader()' without the need to create a > new Reader for each item. > Thanks. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.