Для разработчиков языка 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
Да, вы можете найти только другие плагины для его поддержки.