前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go :gin 模板创建单个二进制文件

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

原创
作者头像
IT工作者
发布2022-07-25 11:23:02
5390
发布2022-07-25 11:23:02
举报
文章被收录于专栏:程序技术知识

背景:

使用gin gonic/gin Web服务器和HTML模板创建单个二进制文件

代码:

main.go

代码语言:javascript
复制
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, er
        }
        t, err = t.New(name).Parse(string(h))
        if err != nil {
            return nil, er
        }
    }
    return t, nil
}

html

bar.tmpl

代码语言:javascript
复制
<!doctype html>
<body>
  <p>Can you see this? → {{.Bar}}</p>
</body>

index.tmpl

代码语言:javascript
复制
<!doctype html>
<body>
  <p>Hello, {{.Foo}}</p>
</body>

安装go-assets-builde

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

使用o-assets 生成go file

go-assets-builder html -o assets.go

查看生成的assets.go

assets.go

代码语言:javascript
复制
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

代码语言:javascript
复制
->curl  localhost:8080
<!doctype html>
<body>
  <p>Hello, World</p>
</body>->

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档