Пакетирование статических файлов языка Go

Go

Для разработчиков языка Go, которые наслаждаются удобством языка, окончательный скомпилированный единый исполняемый файл также является тем, чем мы увлечены. Однако, как только мы сталкиваемся с чем-то, что нам нужно распространять не только исполняемые файлы, все становится немного сложнее, например, нам нужно распространять файл конфигурации по умолчанию или веб-служба должна поставляться с каким-то простым файлом js/css и т. д. .

Конечно, для опытных водителей это не проблема.Например, RPM серии RH - выбор многих водителей-ветеранов.Новички вроде меня тоже считают, что старые драйвера хорошо ездят и могут быть очень удобными.Управлять дистрибутивом . Однако, если у нас есть только несколько файлов, я сделаю пакет rpm, который кажется немного пукающим; в то же время иногда мы можем работать на платформе OSX/Win, которой не хватает определенной степени универсальность.

Исходя из многих соображений, некоторые студенты думают, почему бы не упаковать эти простые статические файлы в исполняемые файлы, чтобы я мог раздать только один файл.На самом деле, мне тоже нравится этот способ.Преимущество в том, что он очень прост.Конечно, недостатки тоже очевидны, а естественное распределение исполняемых файлов велико. В любом случае, есть плюсы и минусы, возможно, вы захотите посмотреть, как этот метод реализован у меня.

Введение в go-bindata

на языке гоAwesomeВы можете увидеть много статических упакованных библиотек, но вы не можетеgo-bindata, ха-ха, это странно ха. И по сравнению с перечисленными в Awesome библиотеками, go-bindata значительно популярнее и популярнее.

go-bindata очень прост, и концепция дизайна несложна для понимания. Его задача — инкапсулировать статические файлы в исходный код языка Go, а затем предоставить унифицированный интерфейс, вы передаете путь к файлу через этот интерфейс, и он вернет вам данные файла соответствующего пути. Это означает, что ему все равно, является ли ваш файл файлом символов или файлом байтов, вы обрабатываете его самостоятельно, он просто обертывает его.

Ерунда, вот пример, показывающий реальное использование go-bindata:

Здесь видно,Line 1Это пример использования go-bindata, описанный здесь.etc/config.jsonИнкапсулируйте его с помощью go-bindata, а затем используйте прямо внизу, чтобы мне не нужно было обращать внимание на конкретное расположение статических файлов при запуске, я только ищуetc/config.jsonДостаточно.

использование go-bindata

Прежде всего, позвольте мне представить мою структуру каталогов, потому что это очень важно для дальнейшего использования go-bindata:

В корневом каталоге я определил файл интерфейса, а затемetcКаталог, в котором размещены мои файлы конфигурации:config.json, который также является файлом конфигурации, который я хочу упаковать, а затемfile/service.goВнутри я реализовал код, который нужно прочитать из файла.

1. Упакуйте статические файлы с помощью go-bindata

Как упоминалось ранее, go-bindata предназначена для упаковки статических файлов в файлы go, поэтому первым шагом является использование go-bindata для чтения файла конфигурации, а затем создания файла go Конкретная команда:

$ go-bindata  -pkg etc -o etc/bindata.go etc/
скопировать код

Что касается параметров go-bindata, вы можете использоватьgo-bindata --helpПроверить. После использования приведенной выше команды вы обнаружите, что вetcеще один в каталогеbindata.goфайл, который мы будем использовать на следующем шаге вместоetc/config.jsonдокумент.

Используйте статические файлы

Код для использования статических файлов также очень прост, нам просто нужно запомнить относительный путь только что сгенерированного файла go, а затем использовать:

Asset("etc/config.json")
скопировать код

Такой оператор может читать статический файл.Пример кода всего сервиса:

Строка 5 здесь, чтобы использовать то, что мы только что сгенерировали.bindata.goФрагмент кода для чтения статического файла.

Суммировать

В этой статье очень просто показано, как использовать go-bindata для упаковки статических файлов и как использовать эти статические файлы в проекте. Из введения этой статьи следует, что go-bindata относительно прост, нет слишком сложного пути, используйтеgo-bindata --helpТакже будет обнаружено, что параметры относительно малы, поэтому он подходит для некоторых сценариев с несложными требованиями. Однако это означает, что его функциональность также может быть ограничена, например, не поддерживается по умолчанию.http.FileSystemДа, вы можете найти только другие плагины для его поддержки.

Reference

  1. Go-Bindata
автор:Соевый соус УокерИсточник:liuliqiang.infoАвторские права на эту статью принадлежат автору и блог-саду, и вы можете перепечатать ее, но это заявление должно быть сохранено без согласия автора, а ссылка на исходный текст должна быть дана в видном месте на странице статьи, в противном случае сохраняется право на юридическую ответственность.