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

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

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

我現(xiàn)在使用的beego進行Web開發(fā),想實現(xiàn)一個類似功能:

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

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

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

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

回答
編輯回答
蟲児飛
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