【问题标题】:golang gin load html timeoutgolang gin 加载 html 超时
【发布时间】:2018-11-27 12:53:32
【问题描述】:

Gin 在加载 index.html 时总是报错

r := gin.New()
r.Use(gin.Logger())
r.Use(gin.Recovery())
r.LoadHTMLGlob("views/**/*")
r.GET("/", func(g *gin.Context) {
    g.HTML(http.StatusOK, "index/index.html", gin.H{
        "title":"test",
    })

2018/11/27 20:23:46 [Recovery] 2018/11/27 - 20:23:46 panic recovered:
GET / HTTP/1.1
Host: localhost:8080
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: pix_k=admin; pix_v=L5lsdrVKJmpAa21DGibdbA%3D%3D
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36


write tcp [::1]:8080->[::1]:55738: i/o timeout
C:/Go/src/runtime/panic.go:505 (0x4300c7)
    gopanic: reflectcall(nil, unsafe.Pointer(d.fn), deferArgs(d), uint32(d.siz), uint32(d.siz))
G:/gowork/src/github.com/gin-gonic/gin/context.go:725 (0xae81de)
    (*Context).Render: panic(err)
G:/gowork/src/github.com/gin-gonic/gin/context.go:734 (0xae82a6)
    (*Context).HTML: c.Render(code, instance)
G:/gowork/src/ihaveadream/routers/routers.go:18 (0xaffa91)
    InitRouter.func1: g.HTML(http.StatusOK, "index/index.html", gin.H{
G:/gowork/src/github.com/gin-gonic/gin/context.go:108 (0xae3952)
    (*Context).Next: c.handlers[c.index](c)
G:/gowork/src/github.com/gin-gonic/gin/recovery.go:52 (0xafca97)
    RecoveryWithWriter.func1: c.Next()
G:/gowork/src/github.com/gin-gonic/gin/context.go:108 (0xae3952)
    (*Context).Next: c.handlers[c.index](c)
G:/gowork/src/github.com/gin-gonic/gin/logger.go:84 (0xafb889)
    LoggerWithWriter.func1: c.Next()
G:/gowork/src/github.com/gin-gonic/gin/context.go:108 (0xae3952)
    (*Context).Next: c.handlers[c.index](c)
G:/gowork/src/github.com/gin-gonic/gin/gin.go:362 (0xaee92c)
    (*Engine).handleHTTPRequest: c.Next()
G:/gowork/src/github.com/gin-gonic/gin/gin.go:328 (0xaee403)
    (*Engine).ServeHTTP: engine.handleHTTPRequest(c)
C:/Go/src/net/http/server.go:2694 (0x7643ca)
    serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
C:/Go/src/net/http/server.go:1830 (0x75f118)
    (*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
C:/Go/src/runtime/asm_amd64.s:2361 (0x45bcb0)
    goexit: BYTE    $0x90   // NOP


2018/11/27 20:23:46 [Recovery] 2018/11/27 - 20:23:46 panic recovered:
GET / HTTP/1.1
Host: localhost:8080
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: pix_k=admin; pix_v=L5lsdrVKJmpAa21DGibdbA%3D%3D
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36


write tcp [::1]:8080->[::1]:55736: i/o timeout
C:/Go/src/runtime/panic.go:505 (0x4300c7)
    gopanic: reflectcall(nil, unsafe.Pointer(d.fn), deferArgs(d), uint32(d.siz), uint32(d.siz))
G:/gowork/src/github.com/gin-gonic/gin/context.go:725 (0xae81de)
    (*Context).Render: panic(err)
G:/gowork/src/github.com/gin-gonic/gin/context.go:734 (0xae82a6)
    (*Context).HTML: c.Render(code, instance)
G:/gowork/src/ihaveadream/routers/routers.go:18 (0xaffa91)
    InitRouter.func1: g.HTML(http.StatusOK, "index/index.html", gin.H{
G:/gowork/src/github.com/gin-gonic/gin/context.go:108 (0xae3952)
    (*Context).Next: c.handlers[c.index](c)
G:/gowork/src/github.com/gin-gonic/gin/recovery.go:52 (0xafca97)
    RecoveryWithWriter.func1: c.Next()
G:/gowork/src/github.com/gin-gonic/gin/context.go:108 (0xae3952)
    (*Context).Next: c.handlers[c.index](c)
G:/gowork/src/github.com/gin-gonic/gin/logger.go:84 (0xafb889)
    LoggerWithWriter.func1: c.Next()
G:/gowork/src/github.com/gin-gonic/gin/context.go:108 (0xae3952)
    (*Context).Next: c.handlers[c.index](c)
G:/gowork/src/github.com/gin-gonic/gin/gin.go:362 (0xaee92c)
    (*Engine).handleHTTPRequest: c.Next()
G:/gowork/src/github.com/gin-gonic/gin/gin.go:328 (0xaee403)
    (*Engine).ServeHTTP: engine.handleHTTPRequest(c)
C:/Go/src/net/http/server.go:2694 (0x7643ca)
    serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
C:/Go/src/net/http/server.go:1830 (0x75f118)
    (*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
C:/Go/src/runtime/asm_amd64.s:2361 (0x45bcb0)
    goexit: BYTE    $0x90   // NOP

【问题讨论】:

  • 你能展示一个包结构吗?

标签: go go-gin


【解决方案1】:

如果您的 index.html 文件位于 views/index/index.html 中,则应使用此通配符。也尝试使用./

r.LoadHTMLGlob("./views/*")
r.GET("/", func(g *gin.Context) {
  g.HTML(http.StatusOK, "index/index.html", gin.H{
    "title":"test",
  }
)

【讨论】:

    【解决方案2】:

    这个问题似乎不是模板加载引起的,你能显示你的包信息或显示更多代码吗?

    这是我的包裹:

    views
    -|index
    -|-|index.html
    main.go
    

    main.go:

    package main
    
    import (
        "github.com/gin-gonic/gin"
        "net/http"
    )
    
    func main(){
        router := gin.Default()
        //define template dir
        router.LoadHTMLGlob("views/**/*")
        // handel router
        router.GET("/",func(c *gin.Context){
            c.HTML(http.StatusOK,"index/index.html",gin.H{
                "title":"test",
            })
        })
    
        router.Run(":8080")
    }
    

    views/index/index.html:

    {{define "index/index.html"}}
        asdds
    {{end}}
    

    demo可以正常运行。我发现只有一个区别,如果你在LoadHTMLGlob中使用subdir,我应该在html中定义模板是这样的:

    {{define "index/index.html"}}{{end}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 2020-09-05
      • 2021-06-13
      • 1970-01-01
      • 2018-05-12
      • 2022-01-27
      • 1970-01-01
      相关资源
      最近更新 更多