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.

Reply via email to