Как (почему) gobuffalo/packr может работать во время сборки?

Я использую https://github.com/gobuffalo/packr для встраивания файлов шаблонов в свой двоичный файл golang. Рассмотрим этот упрощенный пример:

package main

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

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

Согласно документации packr, нужно запустить packr2 для предварительной обработки файлов шаблонов, чтобы они могли быть прочитаны и встроены обычным go-компилятором при последующем запуске.

Однако у меня НЕ установлен репозиторий packr или сам двоичный файл. Эта строка импорта в коде golang - единственная ссылка на packr на моей машине. И все же бегомgo install по-прежнему создает двоичный файл с правильно встроенными шаблонами.

Вопрос: Как такое может быть? Какой механизм здесь использует packr для вызова во время регулярной сборки?

(Первоначально я предполагал, что packr может просто использовать некоторую магию init() для запуска предварительной обработки. Я также поигрался с аннотациями go-generate, чтобы воспроизвести это поведение. Оба эксперимента не увенчались успехом - функции init() не запускаются во время сборки; и go-generate нужно вызывать явно. Это наводит меня на мысль, что здесь packr использует несколько более тонкую магию.)

0 ответов

Другие вопросы по тегам