在Go包中复制数据文件?

时间:2016-11-16 10:00:16

标签: go cgo

我有一个使用CFLAGS for cgo链接到C库的Go包。反过来,C库需要本地数据文件才能正常工作。它是预先构建的3d-party库和设置数据文件路径的选项不可用。

如果包的客户端是本地的并且数据是由lib加载的,那么一切都按预期工作,但是当我构建&安装包,不复制数据文件。

安装软件包时是否有选项可以将自定义文件放在go包附近?

2 个答案:

答案 0 :(得分:0)

  

安装软件包时是否有选项可以将自定义文件放在go包附近?

不,没有。抱歉。这必须通过系统包管理器等其他方式解决。

答案 1 :(得分:0)

我建议使用https://github.com/jteeuwen/go-bindata工具将该依赖项编译到主Go二进制文件中。这样,您就可以在单个二进制文件中存储多个文件(针对不同的操作系统),并在运行时选择正确的文件。我在几个项目中使用它 - 没有发现这种方法有任何问题。

go-bindata -o output_file.go input_data_directory/

然后访问它:

data, err := Asset("some_important_file")
if err != nil {
    // Asset was not found.
}

因此,当您启动应用程序时 - 只需将文件从内部资产复制到应用程序所期望的路径。我希望有所帮助。