我正在使用gobuffalo/packr将模板文件嵌入到golang二进制文件中。考虑以下简化示例:
package main
import (
"github.com/gobuffalo/packr"
)
func main() {
foo, _ := packr.NewBox("./templates").FindString("text.tpl")
println(foo)
}
根据打包程序文档,必须运行packr2
命令以对模板文件进行预处理,以便常规go-compiler在以后运行时可以读取并嵌入它们。
但是,我没有安装packr存储库或二进制文件本身。 golang代码中的该导入行是对我的机器上的packr的唯一引用。但是,运行go install
仍会生成带有正确嵌入模板的二进制文件。
问题: 怎么会这样? Packr在这里采用什么机制在常规构建时调用?
(最初,我认为打包程序可能只是使用init()魔术来触发预处理。我还尝试了go-generate注释来重现该行为。两个实验均不成功-init()函数不在构建时运行时间;并且必须明确调用go-generate。这使我相信,packr在这里使用的是更精致的魔术。)