io.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
При запуске эта программа зависает, поэтому приходится использовать промежуточный буфер, как видно из кода. Что здесь не так с использованием Pipe?
Нужно просто вызов
Writer
обернуть в горутину, иначе все блокируется.go func () {
defer writer.Close()
err = main.Doc.Save(writer) // принимает io.Writer
...
}
}()
Вот и всё
@golang_interview