如何嵌入文件以供以后解析执行使用

如何嵌入文件以供以后解析执行使用,第1张

如何嵌入文件以供以后解析执行使用

我使用大多数Go Web应用程序执行此 *** 作。我使用go-bindata从要嵌入的所有文件中自动生成Go源代码,然后将其编译为二进制文件。所有这些都是在构建过程中自动完成的。

缺点是当前的go构建工具无法提供一种进入构建过程的方式,因此我为此使用了一个Makefile。调用makefile时,它将运行

go-bindata
以生成所有必需文件的源,然后通常执行一些其他代码生成位和鲍勃(特别是,创建Go源文件,该源文件列出了映射中的所有嵌入式文件。)如果您愿意)。然后继续编译实际程序。

这可能会有些混乱,但是您只需将其设置一次即可。另一个缺点是,使用Makefile意味着该软件与

goget
命令不兼容。但是由于我的大多数Web应用程序都不打算共享,因此到目前为止,这并不是问题。

当涉及到调试/开发这样的应用程序时,嵌入静态Web内容会引起另一个问题:我不能只是编辑HTML或CSS文件并刷新浏览器以查看其效果。我将不得不停止服务器,重建它,并在每次编辑时重新启动它。这显然是不理想的,因此我将Makefile拆分为

debug
and
release
模式。释放模式执行我上面描述的 *** 作。但是,调试模式实际上不会嵌入静态文件。它确实为每个文件生成源文件,但是它不是包含实际文件数据,而是包含存根,该存根仅从文件系统中加载数据。

就服务器代码而言,生成的代码没有区别。它所做的只是调用一个函数以获取给定静态文件的内容。不管该内容实际上是嵌入在二进制文件中,还是从外部源加载的内容,都无关紧要。因此,这两种构建模式可以自由互换。

例如,在释放和调试模式下获取静态文件内容的相同生成函数将如下所示:

释放模式:

func index_html() []byte {    return []byte {        ....    }}

调试模式:

func index_html() []byte {   data, err := ioutil.ReadFile("index.html")   ...   return data}

两种情况下的界​​面都是相同的。这样就可以轻松,轻松地进行开发和调试。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5039337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存