go - 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 在这里使用了一些更微妙的魔法。)
解决方案
推荐阅读
- web-services - @Path 和 @Webmethod 之间的区别
- flutter - Flutter bottomSheet 导致拖动错误
- gtk - 如何让 PyGTK 和 Cairo 并行工作?
- android - android GPS BroadCastReceiver for up Api 26
- r - R:如何将 MIP_GAP 选项移交给 ROI 中的 glpk
- python - Xtensor:无法达到 numpy 性能
- reactjs - 为什么导入会给出错误 Module not found: Can't resolve?
- tensorflow - 有人能给我解释一下 Multibox 损失函数吗?
- python - 是否可以使用垂直误差条创建百分比偏差的 matplotlib 条形图?
- npm - np:“未找到上游分支;未推送。”