Есть абсолютно статический сайт.
На голом html.
Его надо перевести на Go.
Вот код, он работает.
package main
import (
"github.com/gin-gonic/contrib/renders/multitemplate"
"github.com/gin-gonic/gin"
)
func main() {
templates := multitemplate.New()
templates.AddFromFiles("index",
"templates/Base.html",
"templates/Index.html")
templates.AddFromFiles("contact",
"templates/Base.html",
"templates/Contact.html")
router := gin.New()
router.HTMLRender = templates
router.GET("/index.html", func(c *gin.Context) {
c.HTML(200, "index", gin.H{
"title": "Home",
"stuff": "Interesting home stuff",
})
})
router.GET("/contact.html", func(c *gin.Context) {
c.HTML(200, "contact", gin.H{
"title": "Contact",
"stuff": "Interesting contact stuff",
})
})
router.Run(":5000")
}
Есть ли вариант не описывать каждый раз роуты и не добавлять каждый раз темплейт для каждого случая?
Например, в папке template лежит файл about.html
Как сделать так, чтобы автоматически создался роут "/about.html" и автоматически добавился нужный темплейт?
P.S. Пробовал в цикле это обрабатывать.
Вот код.
Он даже запускается.
package main
import (
"github.com/gin-gonic/contrib/renders/multitemplate"
"github.com/gin-gonic/gin"
"path/filepath"
)
func main() {
templates := multitemplate.New()
files, _ := filepath.Glob("templates/*.html")
for _, element := range files {
name := element[10:]
templates.AddFromFiles(name, "templates/Base_tmpl", element)
}
Но, при попытке обратится к роуту, получается следующее:
curl localhost:5000/contact.html
curl: (52) Empty reply from server
И вот такая ошибка:
http: panic serving [::1]:39610: runtime error: invalid memory address or nil pointer dereference
goroutine 10 [running]:
net/http.func·011()
/usr/lib/golang/src/net/http/server.go:1130 +0xbb
html/template.(*Template).escape(0x0, 0x0, 0x0)
/usr/lib/golang/src/html/template/template.go:56 +0x3a
html/template.(*Template).Execute(0x0, 0x7f7a588e0780, 0xc2080726e0, 0x76e360, 0xc2080305d0, 0x0, 0x0)
/usr/lib/golang/src/html/template/template.go:75 +0x3d
github.com/gin-gonic/gin/render.HTML.Render(0x0, 0x0, 0x0, 0x76e360, 0xc2080305d0, 0x7f7a588e0748, 0xc2080726e0, 0x0, 0x0)
/home/go-user/workspace/src/github.com/gin-gonic/gin/render/html.go:63 +0xd6
github.com/gin-gonic/gin/render.(*HTML).Render(0xc208030600, 0x7f7a588e0748, 0xc2080726e0, 0x0, 0x0)
<autogenerated>:2 +0xc6
github.com/gin-gonic/gin.(*Context).Render(0xc2080726e0, 0xc8, 0x7f7a588e0720, 0xc208030600)
/home/go-user/workspace/src/github.com/gin-gonic/gin/context.go:326 +0x90
github.com/gin-gonic/gin.(*Context).HTML(0xc2080726e0, 0xc8, 0x804530, 0xc, 0x76e360, 0xc2080305d0)
/home/go-user/workspace/src/github.com/gin-gonic/gin/context.go:341 +0xad
main.func·002(0xc2080726e0)
/home/go-user/site/main.go:41 +0x1ad
github.com/gin-gonic/gin.(*Context).Next(0xc2080726e0)
/home/go-user/workspace/src/github.com/gin-gonic/gin/context.go:95 +0x80
github.com/gin-gonic/gin.(*Engine).handleHTTPRequest(0xc2080cc700, 0xc2080726e0)
/home/go-user/workspace/src/github.com/gin-gonic/gin/gin.go:294 +0x2b3
github.com/gin-gonic/gin.(*Engine).ServeHTTP(0xc2080cc700, 0x7f7a588e05e8, 0xc2080ecaa0, 0xc208033450)
/home/go-user/workspace/src/github.com/gin-gonic/gin/gin.go:275 +0x117
net/http.serverHandler.ServeHTTP(0xc20804e300, 0x7f7a588e05e8, 0xc2080ecaa0, 0xc208033450)
/usr/lib/golang/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc2080eca00)
/usr/lib/golang/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/usr/lib/golang/src/net/http/server.go:1751 +0x35e