【发布时间】:2018-02-24 16:29:56
【问题描述】:
我有数百条元数据记录可供我的 Go 程序使用。我希望将数据编译成二进制文件,这样它就可以正常工作,避免依赖于要运行的其他文件。
元数据以 csv 开头,我还有一个将 csv 处理为结构的包。主程序通过导入该包来使用这些结构。 csv 只是偶尔更改。
我学会了如何将结构导入和导出为 gobs,但我需要将这些 gob 存储在一个文件(等)中并在运行时加载它们。
我考虑制作共享库,但它们是 ELF 格式,似乎不支持我需要的本机 Go 结构。
我可以让 csv-processing 包从字面上打印出 go 代码来重新创建这些结构实例(比如说一个 base64 编码的 gob),用主程序构建,但这似乎是一种非常迂回的方式去吧。
有没有一种简单的方法可以将这个准备好的结构数据嵌入到我的二进制文件中?
【问题讨论】:
-
这不是一个非常迂回的方法。这是历史悠久的直截了当的方法。
-
我唯一的建议是不要使用 base64。那只会让你的二进制文件膨胀。使用十六进制文字。这将使您的源代码更大,但谁在乎呢,因为它是您不应该阅读的生成源。然后编译后的版本会更小,执行起来也更快(因为不需要 base64 解码)。
-
它可能是历史悠久的最佳选择,但它绝对不是直截了当的。最困扰我的部分是虽然 gob 是“自描述的”,但接收类型仍然需要定义,所以我必须维护两个单独的副本。我想我可以跨包进行符号链接。
-
我认为历史悠久的方式不包括吞噬。如果这样做,您也可以将原始 csv 作为字符串嵌入到源代码中。常见的做法是生成结构文字。
-
csv 需要一些处理,而且它很少改变,所以当你可以做一次(至少在这种情况下)时,每次运行都必须这样做是没有意义的。
标签: go