Я понимаю, что вопрос может выглядеть слишком конкретным c, но я думаю, что ответы могут быть полезны и для других областей.
Реальная проблема, с которой я сталкиваюсь: учитывая произвольное изображение контейнера, которое имеет sh
двоичный файл, загрузите файл из Google Cloud Storage.
Поскольку двоичный файл загрузчика не существует в образе пользователя, у меня была идея поместить закодированный двоичный файл в командную строку (немного похоже на встроенный скрипты типа python -c <code>
). Однако существуют ограничения на размер командной строки (~ 1MiB), поэтому двоичное значение должно быть меньше, чем это.
Я решил использовать Go из-за простоты создания статически связанных двоичных файлов и люди сообщают, что GO двоичные файлы небольшие.
Я написал Go программу, которая использует модуль cloud.google.com/go/storage
для создания клиента и чтения большого двоичного объекта storage.NewClient().Bucket(bucket).Object(object).NewReader()
.
К сожалению, двоичный файл для простой программы оказывается 15MiB. Добавление go build -ldflags=" -s -w"
(как предложено в Как уменьшить размер скомпилированного файла? ) уменьшает это до 10 МБ. Это все еще на порядок больше, чем мой размерный бюджет.
Существуют ли бинарные оптимизации или методы сокращения, которые я мог бы использовать?
Должен ли я взглянуть на какой-нибудь другой язык (например, C ++), если я sh иметь меньший двоичный файл?
Повезет ли мне больше, если я попытаюсь использовать какую-нибудь общую c REST клиентскую библиотеку? // Похоже, нет - размер зачищенной Go программы, которая использует http.Get
, составляет 5 МБ.