html - 随机数未呈现的HTML模板

标签 html go go-templates

我正在下面运行Go [go1.12.9 windows/amd64]程序(以测试Go HTML模板)

localhost/8080/



但是模板只是不会在浏览器(Chrome,Edge)中呈现。

控制台中也没有错误。

一个人应该如何让该程序在浏览器中呈现?
package main

import (

    // "fmt"
    "html/template"
    "log"
    "math/rand"
    "net/http"
    "time"
    // "golang.org/x/mobile/app"
)

func main() {
    http.HandleFunc("/", randNum)
    log.Fatal(http.ListenAndServe(":8080", nil))

}

func randNum(w http.ResponseWriter, r *http.Request) {
    // Create random number
    type RNumber struct {
        A int
    }

    aRand := rand.Intn(10)
    Rnum := RNumber{aRand}

    //Show Template
    Tmpl, _ := template.New("randNum1").Parse("HTML NUMBER ======> {{.A}}  ")
    // Tmpl := template.Must(template.ParseFiles("ui0.html"))<===Also passed values to Html files not rendering
    err := Tmpl.Execute(w, Rnum)
    if err != nil {
        print(err)
    }
    time.Sleep(3000 * time.Millisecond)

    //Loop
    randNum(w, r)
}

编辑1

请注意,每3秒需要显示一个新的随机数。在此编辑中,递归randnum调用已被删除,新的“for” 循环已添加到上述脚本中。但是,html会显示一个随机数,然后呈现相同的数字。 不会像预期的那样每3秒渲染一次新的随机数。
import (
// "fmt"
    "html/template"
    "log"
    "math/rand"
    "net/http"
    "time"
    // "golang.org/x/mobile/app"
)

func main() {
    http.HandleFunc("/", randNum)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func randNum(w http.ResponseWriter, r *http.Request) {
    // Create random number
    type Rnumber struct {
        A int
    }

    aRand := rand.Intn(10)
    Rnumber1 := Rnumber{aRand}

    //Create Template
    Tmpl, _ := template.New("randNum1").Parse("HTML NUMBER ======> {{.A}}  ")

    // Render a new random number every 3s
    loop := 5
    for loop > 0 {
            fmt.Println("loop = ", loop)
        loop --
        err := Tmpl.Execute(w, Rnumber1)
        if err != nil {
            print(err)
        }
        time.Sleep(3000 * time.Millisecond)
    }
}

**

EDIT 2



我在上面的脚本中添加了一个fmt.Println("loop = ", loop)行,以检查带有sleep功能(3s)的的循环(-5times)在中的循环是如何发生的。不确定如何不显示新的随机数?

HTML RENDERED


HTML NUMBER ======> 425  HTML NUMBER ======> 425  HTML NUMBER ======> 425  HTML NUMBER ======> 425  HTML NUMBER ======> 425   

CONSOLE OUTPUT


loop =  4
loop =  4
loop =  4
loop =  4
loop =  4
loop =  4
loop =  3
loop =  4
loop =  3
loop =  3
loop =  3
loop =  3
loop =  3
loop =  2
loop =  3
loop =  2
loop =  2
loop =  2
loop =  2
loop =  2
loop =  1
loop =  2
loop =  1
loop =  1
loop =  1
loop =  1
loop =  1
loop =  0
loop =  1
loop =  0
loop =  0
loop =  0
loop =  0
loop =  0
loop =  0

最佳答案

randNum是启用的递归,它将每3秒调用一次,直到它因堆栈溢出而崩溃为止。并且由于它永远不会返回,因此HTTP服务器将不会关闭连接,并期望处理程序完成写入。删除sleep和randnum调用线路。而是在将模板写入writer w之后从函数返回。

关于html - 随机数未呈现的HTML模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57735309/

相关文章:

java - 他们可以将Javascript变量分配或获取到java变量吗?

go - Set-Cookie 在 Safari 中与本地主机一起工作但不与服务器一起工作

Go 语言模板 : always quotes a string and removes comments

javascript - 在 Anything Slider 下面添加一个文本框

xml - HTML5 是什么类型的文档?

go - Beego框架如何进行数据库迁移?

mysql - 在 MySQL 上创建存储过程

templates - Golang 模板(并将函数传递给模板)

go - 与 golang 模板的最小差异?

android - 如何调整视口(viewport)大小和缩放以支持跨浏览器?