func/vendor/github.com/acomagu/bufpipe
David Simansky c7b1bce369
chore(deps): update Knative dependencies to v1.4 @dsimansk (#1194)
* Update to Golang 1.17

* Update Knative dependencies to v1.4

* Update vendor dir

* Update go version in GH actions

* Fix go.mod

* fixup: update deps

Signed-off-by: Matej Vasek <mvasek@redhat.com>

* fixup: update deps

Signed-off-by: Matej Vasek <mvasek@redhat.com>

* fixup: update deps

Signed-off-by: Matej Vasek <mvasek@redhat.com>

Signed-off-by: Matej Vasek <mvasek@redhat.com>
Co-authored-by: Matej Vasek <mvasek@redhat.com>
2022-08-25 16:32:19 +00:00
..
README.md Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
bufpipe.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00
doc.go Vendor dependencies (#531) 2021-09-16 04:42:39 -07:00

README.md

bufpipe: Buffered Pipe

CircleCI GoDoc

The buffered version of io.Pipe. It's safe for concurrent use.

How does it differ from io.Pipe?

Writes never block because the pipe has variable-sized buffer.

r, w := bufpipe.New(nil)
io.WriteString(w, "abc") // No blocking.
io.WriteString(w, "def") // No blocking, too.
w.Close()
io.Copy(os.Stdout, r)
// Output: abcdef

Playground

How does it differ from bytes.Buffer?

Reads block if the internal buffer is empty until the writer is closed.

r, w := bufpipe.New(nil)

done := make(chan struct{})
go func() {
	io.Copy(os.Stdout, r) // The reads block until the writer is closed.
	done <- struct{}{}
}()

io.WriteString(w, "abc")
io.WriteString(w, "def")
w.Close()
<-done
// Output: abcdef

Playground