我正在开发一个包含资源文件的库,特别是一个电子邮件模板。该文件位于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的用户添加变量。
内联字符串上的模板:它很难看。
有没有人有更好的选择?我不想仅仅为此使用第三方库,但如果你知道一个人可以随意指出它,那么我可以阅读这些来源,看看他们是如何做到的。
由于
答案 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文件 文件系统。