首页 > 解决方案 > gobuffalo/packr 如何(为什么)在构建时运行?

问题描述

我正在使用gobuffalo/packr将模板文件嵌入到我的 golang 二进制文件中。考虑这个简化的例子:

package main

import (
    "github.com/gobuffalo/packr"
)

func main() {
    foo, _ := packr.NewBox("./templates").FindString("text.tpl")
    println(foo)
}

根据 packr 文档,必须运行该packr2命令才能预处理模板文件,以便在常规 go-compiler 之后运行时可以读取和嵌入它们。

但是,我没有安装 packr repo 或二进制文件本身。golang 代码中的导入行是我机器上对 packr 的唯一引用。然而,运行go install仍然会生成一个带有正确嵌入模板的二进制文件。

问: 这怎么可能?packr 在这里采用什么机制在常规构建时调用?

(最初我假设 packr 可能只是使用一些 init() 魔法来触发预处理。我还玩弄了 go-generate 注释来重现该行为。两个实验都不成功 - init() 函数不在构建时运行;和go-generate 需要被明确地调用。这让我相信,packr 在这里使用了一些更微妙的魔法。)

标签: gopackr

解决方案


推荐阅读