gobuffalo / packr如何(为什么)在构建时运行?

时间:2019-09-14 21:34:09

标签: go packr

我正在使用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在这里使用的是更精致的魔术。)

0 个答案:

没有答案