Использование 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
            ...
            }
        }()
→ Ссылка