我正在下面运行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/