使用golang分发资源

时间:2016-07-30 22:50:15

标签: go resources relative-path

我正在开发一个包含资源文件的库,特别是一个电子邮件模板。该文件位于create_table "segments", force: :cascade do |t| t.jsonb "payload", default: "[]", null: false t.index ["payload"], name: "index_segments_on_payload", using: :gin end

我很难从<project_root>/templates/email.html来源引用此文件,因为很难解析相对路径。到目前为止,我找到的选项是:

  • 使用.go:这附带一些依赖管理工具可能会重新定义$GOPATH并中断

  • 的问题
  • 使用自定义env变量:有效但会强制lib的用户添加变量。

  • 内联字符串上的模板:它很难看。

有没有人有更好的选择?我不想仅仅为此使用第三方库,但如果你知道一个人可以随意指出它,那么我可以阅读这些来源,看看他们是如何做到的。

由于

1 个答案:

答案 0 :(得分:1)

最常见的技术是嵌入资源,所以你要做的就是分发二进制文件。

Go库的

This list有一个执行资源嵌入的库列表:

  
      
  • esc - 将文件嵌入到Go程序中,并为它们提供http.FileSystem接口。
  •   
  • fileb0x - 嵌入文件的简单工具,重点关注“自定义”并易于使用。
  •   
  • go-bindata - 将任何文件转换为可管理的Go源代码的包。
  •   
  • go-embed - 生成代码以将资源文件嵌入到您的库或可执行文件中
  •   
  • go-resources - 使用Go嵌入不同的资源。
  •   
  • go.rice - go.rice是一个Go包,可以处理html,js,css,images等资源   和模板非常容易。
  •   
  • statics - 将静态资源嵌入到go文件中以进行单个二进制编译+使用   http.FileSystem +符号链接。
  •   
  • vfsgen - 生成静态实现给定虚拟的vfsdata.go文件   文件系统。
  •