go :gin 模板创建单个二进制文件 - Go语言中文社区

go :gin 模板创建单个二进制文件


背景:
使用gin gonic/gin Web服务器和HTML模板创建单个二进制文件
代码:
main.go

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
}

html
bar.tmpl

<!doctype html>
<body>
  <p>Can you see this? → {{.Bar}}</p>
</body>

index.tmpl

<!doctype html>
<body>
  <p>Hello, {{.Foo}}</p>
</body>

安装go-assets-builder

go get github.com/jessevdk/go-assets-builder

使用o-assets 生成go file

go-assets-builder html -o assets.go

查看生成的assets.go
assets.go

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),
	}}, "")

生成二进制文件

构建二进制镜像

go build -o assets-in-binary

运行二进制文件

./assets-in-binary

在这里插入图片描述
访问localhost:8080

->curl  localhost:8080
<!doctype html>
<body>
  <p>Hello, World</p>
</body>->

参考:
go-assets
go assets是一个简单的嵌入资产生成器和go的消费者库。该库的主要用途是生成和嵌入内存中的小文件系统,这些文件系统可以集成到运行时使用少量资源的web服务器或其他服务中。这对于能够使用资产执行单个二进制部署非常好。
生成器类型可用于从磁盘上的文件和目录生成包含内存中文件树的go文件。可以选择使用gzip压缩文件数据以减小文件大小。之后,生成的文件可以包含在应用程序中,并且可以直接访问这些资产,而无需从磁盘加载它们。生成的assets变量的类型为FileSystem,并实现os.FileInfo和http.FileSystem接口,以便它们可以直接与http.FileHandler一起使用

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/textdemo123/article/details/103410425
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 12:13:59
  • 阅读 ( 1668 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢