func Pipe() (*PipeReader, *PipeWriter)
Pipe создает синхронный pipe в памяти. Его можно использовать для соединения кода, ожидающего io.Reader, с кодом, ожидающим io.Writer.
Чтения и записи в pipe сопоставляются один к одному, за исключением случаев, когда для чтения одной записи требуется несколько операций чтения. То есть каждый Write в PipeWriter блокируется до тех пор, пока не будет выполнено одна или несколько операций Read из PipeReader, которые полностью используют записанные данные. Данные копируются непосредственно из Write в соответствующие Read (или несколько Read); нет внутренней буферизации.
Безопасно вызывать Read и Write параллельно друг с другом или с помощью Close. Параллельные вызовы на чтение и параллельные вызовы на запись также безопасны: индивидуальные вызовы будут проходить последовательно.
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
r, w := io.Pipe()
go func() {
fmt.Fprint(w, "some text to be read\n")
w.Close()
}()
buf := new(bytes.Buffer)
buf.ReadFrom(r)
fmt.Print(buf.String())
}
Вывод:
some text to be read
Тип PipeReader
PipeReader - это считывающая половина pipe.
type PipeReader struct {
// содержит отфильтрованные или неэкспортированные поля
}
func (r *PipeReader) Close() error
Close закрывает reader; последующие записи в записывающей половине pipe будут возвращать ошибку ErrClosedPipe.
func (r *PipeReader) CloseWithError(err error) error
CloseWithError закрывает reader; последующие записи в записывающей половине pipe будут возвращать err.
CloseWithError никогда не перезаписывает предыдущую ошибку, если она существует, и всегда возвращает nil.
func (r *PipeReader) Read(data []byte) (n int, err error)
Read реализует стандартный интерфейс Read: он читает данные из pipe, блокируя до тех пор, пока не прибудет writer или не закроется конец записи. Если конец записи закрыт с ошибкой, эта ошибка возвращается как err; в противном случае ошибка EOF.
Тип PipeWriter
PipeWriter - это записывающая половина pipe.
type PipeWriter struct {
// содержит отфильтрованные или неэкспортированные поля
}
func (w *PipeWriter) Close() error
Close закрывает writer; последующие чтения из считывающей половины pipe не будут возвращать байты и вернут EOF.
func (w *PipeWriter) CloseWithError(err error) error
CloseWithError закрывает writer; последующие операции чтения из считывающей половины pipe не будут возвращать байтов и вернут ошибку err, или EOF, если err равно nil.
CloseWithError никогда не перезаписывает предыдущую ошибку, если она существует, и всегда возвращает nil.
func (w *PipeWriter) Write(data []byte) (n int, err error)
Write реализует стандартный интерфейс Write: он записывает данные в pipe, блокируя до тех пор, пока один или несколько считывателей не израсходуют все данные или не будет закрыт конец чтения. Если конец чтения закрыт с ошибкой, эта err возвращается как err; в противном случае ошибка - ErrClosedPipe.
Читайте также:
- Пакет io в Golang, функции копирования
- Пакет io в Golang, ошибки
- Как использовать интерфейс io.Writer в Golang
Комментариев нет:
Отправить комментарий