On Thu, 13 Oct 2016 10:43:24 -0700 (PDT)
Walter Garcia <wal...@gmail.com> wrote:

> Im trying to test using zlib.
> In my test I need compress the Stdout from exec.Command to zlib and
> then send to io.reader to use in other service
> cmd := exec.Command("mysqldump", args...)
> ......
> cmd.StdoutPipe()
> z := zlib.NewWriter( ... )
> .....
> z -> to -> io.reader
> Could you help me?

You can't do that directly because you can only write to io.Writer-s.
This is reasonable if you stop and think about it for a moment: an
io.Writer is a "push-style" interface -- you write something to
whatever is implementing it and block until that action happens; --
conversely, io.Reader is a "pull-style" interface -- you read something
from a source and that blocks until the source is ready.

To glue a writer and a reader you need some intermediate "thing" which
would simultaneostly be a reader and a writer (!) -- so that it
satisfies both kinds of interfaces described above.

Such things are called "pipes" and Go provides at least two of them:

* io.Pipe is a pure-Go pipe;
* os.Pipe is a pipe provided by the underlying kernel.

The former is supposedly what you need.

Still note that to make

  z -> pipe -> io.reader

really work the "z" and the "io.reader" parts have to be in separate
goroutines otherwise they will block one another.

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