Add example to build single binary with templates (#1328)
This commit is contained in:
committed by
Bo-Yi Wu
parent
dfe37ea6f1
commit
814ac9490a
33
examples/assets-in-binary/README.md
Normal file
33
examples/assets-in-binary/README.md
Normal file
@ -0,0 +1,33 @@
|
||||
# Building a single binary containing templates
|
||||
|
||||
This is a complete example to create a single binary with the
|
||||
[gin-gonic/gin][gin] Web Server with HTML templates.
|
||||
|
||||
[gin]: https://github.com/gin-gonic/gin
|
||||
|
||||
## How to use
|
||||
|
||||
### Prepare Packages
|
||||
|
||||
```
|
||||
go get github.com/gin-gonic/gin
|
||||
go get github.com/jessevdk/go-assets-builder
|
||||
```
|
||||
|
||||
### Generate assets.go
|
||||
|
||||
```
|
||||
go-assets-builder html -o assets.go
|
||||
```
|
||||
|
||||
### Build the server
|
||||
|
||||
```
|
||||
go build -o assets-in-binary
|
||||
```
|
||||
|
||||
### Run
|
||||
|
||||
```
|
||||
./assets-in-binary
|
||||
```
|
34
examples/assets-in-binary/assets.go
Normal file
34
examples/assets-in-binary/assets.go
Normal file
@ -0,0 +1,34 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/jessevdk/go-assets"
|
||||
)
|
||||
|
||||
var _Assetsbfa8d115ce0617d89507412d5393a462f8e9b003 = "<!doctype html>\n<body>\n <p>Can you see this? → {{.Bar}}</p>\n</body>\n"
|
||||
var _Assets3737a75b5254ed1f6d588b40a3449721f9ea86c2 = "<!doctype html>\n<body>\n <p>Hello, {{.Foo}}</p>\n</body>\n"
|
||||
|
||||
// Assets returns go-assets FileSystem
|
||||
var Assets = assets.NewFileSystem(map[string][]string{"/": {"html"}, "/html": {"bar.tmpl", "index.tmpl"}}, map[string]*assets.File{
|
||||
"/": {
|
||||
Path: "/",
|
||||
FileMode: 0x800001ed,
|
||||
Mtime: time.Unix(1524365738, 1524365738517125470),
|
||||
Data: nil,
|
||||
}, "/html": {
|
||||
Path: "/html",
|
||||
FileMode: 0x800001ed,
|
||||
Mtime: time.Unix(1524365491, 1524365491289799093),
|
||||
Data: nil,
|
||||
}, "/html/bar.tmpl": {
|
||||
Path: "/html/bar.tmpl",
|
||||
FileMode: 0x1a4,
|
||||
Mtime: time.Unix(1524365491, 1524365491289611557),
|
||||
Data: []byte(_Assetsbfa8d115ce0617d89507412d5393a462f8e9b003),
|
||||
}, "/html/index.tmpl": {
|
||||
Path: "/html/index.tmpl",
|
||||
FileMode: 0x1a4,
|
||||
Mtime: time.Unix(1524365491, 1524365491289995821),
|
||||
Data: []byte(_Assets3737a75b5254ed1f6d588b40a3449721f9ea86c2),
|
||||
}}, "")
|
4
examples/assets-in-binary/html/bar.tmpl
Normal file
4
examples/assets-in-binary/html/bar.tmpl
Normal file
@ -0,0 +1,4 @@
|
||||
<!doctype html>
|
||||
<body>
|
||||
<p>Can you see this? → {{.Bar}}</p>
|
||||
</body>
|
4
examples/assets-in-binary/html/index.tmpl
Normal file
4
examples/assets-in-binary/html/index.tmpl
Normal file
@ -0,0 +1,4 @@
|
||||
<!doctype html>
|
||||
<body>
|
||||
<p>Hello, {{.Foo}}</p>
|
||||
</body>
|
48
examples/assets-in-binary/main.go
Normal file
48
examples/assets-in-binary/main.go
Normal file
@ -0,0 +1,48 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
r := gin.New()
|
||||
t, err := loadTemplate()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
r.SetHTMLTemplate(t)
|
||||
r.GET("/", func(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "/html/index.tmpl", gin.H{
|
||||
"Foo": "World",
|
||||
})
|
||||
})
|
||||
r.GET("/bar", func(c *gin.Context) {
|
||||
c.HTML(http.StatusOK, "/html/bar.tmpl", gin.H{
|
||||
"Bar": "World",
|
||||
})
|
||||
})
|
||||
r.Run(":8080")
|
||||
}
|
||||
|
||||
func loadTemplate() (*template.Template, error) {
|
||||
t := template.New("")
|
||||
for name, file := range Assets.Files {
|
||||
if file.IsDir() || !strings.HasSuffix(name, ".tmpl") {
|
||||
continue
|
||||
}
|
||||
h, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t, err = t.New(name).Parse(string(h))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return t, nil
|
||||
}
|
Reference in New Issue
Block a user