Как распространять приложение Go?

Я написал приложение в Go. Он имеет две внешние зависимости, которые необходимо выполнить перед компиляцией. В экосистеме Go, что является лучшим способом для упаковки этого приложения для простого процесса установки, который включает в себя установку этих удаленных отпечатков? Как пользователь может установить мое приложение?

Ответы

Ответ 1

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

  • Если у вас есть активы, которые вы хотите предоставить вместе с приложением (например, файл конфигурации), то: a) упакуйте двоичный файл с активами и tar/zip его; b) base64 закодирует активы и скомпилирует их в двоичный см. здесь для хорошего примера или c) создайте сборку/установку script, которая делает это для пользователя.

Если вы можете уточнить свои точные требования, будет проще ответить более непосредственно.

Ответ 2

Двоичные файлы Go не имеют зависимостей времени выполнения, кроме тех, которые вы могли бы навязать в своем коде. (Его библиотеки времени выполнения включены в скомпилированный исполняемый файл.)

Таким образом, вы будете распространять свое приложение так же, как любой другой статически связанный двоичный файл, скомпилированный из C, C++ или другого кода.

В Linux вы можете создать файл .rpm или .deb, используя соответствующие инструменты для этого. В Windows вы можете создать установщик, используя такой инструмент, как InnoSetup.

Ответ 3

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

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

Единственное, что вам нужно беспокоиться с точки зрения Go, это то, что вы скомпилировали свой код для своей пользовательской платформы.