У меня есть довольно большой файл (~ 1 ГБ), который я хочу встроить в Go двоичный файл. Файл представляет собой tar.gz некоторых экспортированных Docker изображений. Цель встраивания этого файла в двоичный файл состоит в том, чтобы гарантировать, что программа Go и образы Docker не могут быть не синхронизированы c, и сделать тривиальным развертывание этого двоичного файла в виде одного файла.
Кажется, есть несколько библиотек, которые могут это сделать, я попробовал packr , и это сработало в целом. Но, к сожалению, когда я смотрел на использование ресурсов программой при передаче этого встроенного файла в docker load
, моя программа использовала до 6 ГБ ОЗУ для этого процесса.
Код для встраивания и использования файла был следующее:
imageBox := packr.NewBox("./images")
cmd := exec.Command("docker", "load")
imageFileHandle, _ := imageBox.Open("image.tar.gz")
cmd.Stdin = imageFileHandle
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
_ := cmd.Run()
Я не уверен, что делаю что-то не так в том, как я подключаю встроенный файл к выполнению здесь docker load
, или эта библиотека просто не предназначена для что я здесь делаю Я немного больше искал инструменты для встраивания файлов в Go, но, похоже, они в основном нацелены на что-то вроде stati c ресурсов для веб-сервера, так что куча относительно небольших файлов. Я не нашел ничего об эффективном внедрении очень больших блоков данных.
Есть ли способ встроить один большой файл в двоичный файл go и эффективно передать его в команду, не загружая его полностью в память