在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/GO/ Golang是否能夠?qū)崿F(xiàn)瀏覽器逐行輸出

Golang是否能夠?qū)崿F(xiàn)瀏覽器逐行輸出

Golang是否能夠?qū)崿F(xiàn)PHP類似的緩沖區(qū)輸出

我現(xiàn)在使用的beego進(jìn)行Web開(kāi)發(fā),想實(shí)現(xiàn)一個(gè)類似功能:

頁(yè)面打印1到10000000的數(shù)字,使用循環(huán)進(jìn)行操作,然后每次循環(huán)時(shí)輸出當(dāng)前的數(shù)字。

如果正常操作,那么當(dāng)頁(yè)面顯示時(shí),數(shù)字已經(jīng)全部顯示完成了,這樣打不到我要的效果。

有沒(méi)有辦法能夠達(dá)到我打開(kāi)頁(yè)面,然后開(kāi)始執(zhí)行循環(huán),每循環(huán)一次,頁(yè)面中就輸出一個(gè)數(shù)字,而不是全部循環(huán)、輸出完成后才顯示頁(yè)面?

PHP可以有類似于ob_flush等函數(shù)來(lái)實(shí)現(xiàn),可是golang不太清除怎么實(shí)現(xiàn)。

回答
編輯回答
蟲(chóng)児飛
package main

import (
    "fmt"
    "net/http"
    "log"
    "time"
)


func handler(res http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(res, "<body>")
    for i := 0; i < 1000; i++ {
        fmt.Fprint(res, "<script>document.body.innerHTML = ''</script>")
        fmt.Fprintf(res, "%d", i)
        if f, ok := res.(http.Flusher); ok {
            f.Flush()
        } else {
            log.Println("Damn, no flush");
        }
        time.Sleep(1000 * time.Millisecond)
    }

    fmt.Fprintln(res, "</body>")
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}
2018年3月9日 17:25