为了账号安全,请及时绑定邮箱和手机立即绑定

Go:在二进制中嵌入静态文件

Go:在二进制中嵌入静态文件

Go
慕侠2389804 2021-09-10 18:14:40
这可能是一个非常业余的问题。我正在尝试将静态文件嵌入到二进制文件中,即。html。我如何使用https://github.com/jteeuwen/go-bindata做到这一点?因此,我可以使用此https://github.com/jteeuwen/go-bindata#accessing-an-asset访问资产,但是我如何处理“数据”,以及如何解析文件、执行模板和在目录中为他们服务?我在网上找不到任何例子,希望得到一些帮助!
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

5/6 年后,使用 Go 1.16(2021 年第一季度)应该会更容易,它增加了对嵌入文件的支持(问题/提案 41191)


允许使用//go:embed命名单个文件来初始化普通string或[]byte变量:


//go:embed gopher.png

var gopherPNG []byte

导入需要将文件标记为包含//go:embed行并需要处理。

Goimports(gopls等)可以教授此规则,并//go:embed根据需要自动在任何文件中添加导入。


这引发了关于issue 42328关于如何避免在使用时意外包含“隐藏”文件的辩论//go:embed


这已在CL 275092 中解决并提交 37588ff


决定排除文件匹配.*和_*嵌入整个目录树时从嵌入目录的结果。


看 src/embed/internal/embedtest/embed_test.go


    //go:embed testdata/k*.txt

    var local embed.FS

    testFiles(t, local, "testdata/ken.txt", "If a program is too slow, it must have a loop.\n")


    //go:embed testdata/k*.txt

    var s string

    testString(t, s, "local variable s", "If a program is too slow, it must have a loop.\n")


    //go:embed testdata/h*.txt

    var b []byte

    testString(t, string(b), "local variable b", "hello, world\n")

注意:对于CL 281492,如果支持,则cmd/go传递embedcfg到gccgo。


参见(2021年1月)发行43854 “选择将其//go:embed以不忽略文件和空迪尔斯”。


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信