Использование io.Pipe в Golang
Пытался использовать io.Pipe для создания туннеля между писателем и читателем. Сервер (моя программа) зависает. В итоге юзаю промежуточный буфер как видно из кода. Что я делаю не так с Pipe?
// отправляем пользователю ответ с аттачем
//reader, writer := io.Pipe()
writer := new(bytes.Buffer)
err = main.Doc.Save(writer) // метод Документа из unioffice - принимает io.Writer, сохраняет тип Document в zip.
//writer.Close() // для Pipe
...
reader := bytes.NewReader(writer.Bytes())
...
nbytes, err := io.Copy(w, reader) // w это http.ResponseWriter
Ответы (1 шт):
Автор решения: Garry Galler
→ Ссылка
I am stupid :-) Нужно было вызов писателя обернуть в горутину, иначе все блокируется.
go func () {
defer writer.Close()
err = main.Doc.Save(writer) // принимает io.Writer
...
}
}()