Выпуск приложения на Golang

Хочу разобраться как билдяться приложения, написанные на языке Go. Если прописать команду go build то соберётся лишь один исполняемый файл. Это всё что нужно для запуска приложения? Например в C# если собрать проект, там появиться отдельная папка publish, в которой будут все зависимости. А где храняться все зависимости в выпущенном приложении на Go?


Ответы (1 шт):

Автор решения: Andrey Tabakov

Go компилирует все зависимости (включая сторонние библиотеки) напрямую в исполняемый файл.

Зависимости указываются в go.mod (модуль) и go.sum (хэши для проверки).

При первом запуске go build Go автоматически скачивает зависимости из интернета (например, с GitHub) и кэширует их в $GOPATH/pkg/mod.

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


Правда можно линковать и динамически. По умолчанию Go использует статическую линковку.

Однако, если ваш код вызывает C-библиотеки через CGO (например, import "C"), то эти библиотеки будут динамически линковаться. Т.е. они должны быть предустановлены на ОС в виде отдельных скомпилированных файлов, как .dll в С#.

Чтобы избежать этого, можно отключить CGO: CGO_ENABLED=0 go build.

→ Ссылка