Rumah > Artikel > pembangunan bahagian belakang > goroutine tidak menulis ke saluran
Saya baru pergi dan saya menghadapi masalah menggunakan kod di bawah
func (h *Handler) GeneratePdfFromHTML(c echo.Context) (err error) { req := &createPdfFromHTMLRequest{} if err := req.bind(c); err != nil { return c.JSON(http.StatusBadRequest, utils.NewError(err)) } rawDecodedText, err := base64.StdEncoding.DecodeString(req.HTML) if err != nil { return c.JSON(http.StatusInternalServerError, utils.NewError(err)) } buf := make(chan []byte) go func() { defer close(buf) pdf, err := pdf.GenerateFromHTML(string(rawDecodedText)) if err == nil { buf <- pdf } }() if err != nil { return c.JSON(http.StatusInternalServerError, utils.NewError(err)) } return c.Blob(http.StatusOK, MIMEApplicationPdf, <-buf) }
Tiada nilai diterima dalam goroutine pdf
中从 generatefromhtml
接收信息,但是 buf
, jadi fungsi kod ini mengembalikan bait bersaiz 0.
Sebarang bantuan amat kami hargai. Terima kasih terlebih dahulu
Kod ini bersifat segerak. Pengendali menjana sekeping bait dan harus menggunakan kaedah c.blob untuk mengembalikan kepingan itu apabila bait ini sedia.
Kod yang disiarkan mula berfungsi dalam goroutine, tidak menunggu kerja selesai dan mengembalikan kepingan bait nol.
Anda boleh menyelesaikan masalah ini dengan membuang goroutine:
data, err := pdf.GenerateFromHTML(string(rawDecodedText)) if err == nil { // handle error here } return c.Blob(http.StatusOK, MIMEApplicationPdf, data)
Satu-satunya masalah dengan kod ini ialah memuatkan semua data ke dalam memori, tetapi ini tidak dapat dielakkan jika pdf.generatefromhtml
返回 []byte
Jika perlu, anda boleh menambah baik ini dengan mengemas kini pdf.generatefromhtml
以返回 io.reader
dan menggunakan c.Stream .
Atas ialah kandungan terperinci goroutine tidak menulis ke saluran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!