forked from Shiloh/githaven
86e2789960
* update github.com/PuerkitoBio/goquery * update github.com/alecthomas/chroma * update github.com/blevesearch/bleve/v2 * update github.com/caddyserver/certmagic * update github.com/go-enry/go-enry/v2 * update github.com/go-git/go-billy/v5 * update github.com/go-git/go-git/v5 * update github.com/go-redis/redis/v8 * update github.com/go-testfixtures/testfixtures/v3 * update github.com/jaytaylor/html2text * update github.com/json-iterator/go * update github.com/klauspost/compress * update github.com/markbates/goth * update github.com/mattn/go-isatty * update github.com/mholt/archiver/v3 * update github.com/microcosm-cc/bluemonday * update github.com/minio/minio-go/v7 * update github.com/prometheus/client_golang * update github.com/unrolled/render * update github.com/xanzy/go-gitlab * update github.com/yuin/goldmark * update github.com/yuin/goldmark-highlighting Co-authored-by: techknowlogick <techknowlogick@gitea.io>
43 lines
1.1 KiB
Markdown
Vendored
43 lines
1.1 KiB
Markdown
Vendored
# bufpipe: Buffered Pipe
|
|
|
|
[![CircleCI](https://img.shields.io/circleci/build/github/acomagu/bufpipe.svg?style=flat-square)](https://circleci.com/gh/acomagu/bufpipe) [![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/acomagu/bufpipe)
|
|
|
|
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.
|
|
|
|
```Go
|
|
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](https://play.golang.org/p/PdyBAS3pVob)
|
|
|
|
## How does it differ from bytes.Buffer?
|
|
|
|
Reads block if the internal buffer is empty until the writer is closed.
|
|
|
|
```Go
|
|
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](https://play.golang.org/p/UppmyLeRgX6)
|