Ответ
Go — это статически компилируемый язык. Исходный код на Go компилируется непосредственно в нативный машинный код для целевой платформы (ОС и архитектуры). В результате получается один исполняемый бинарный файл, который не требует для запуска виртуальной машины или интерпретатора.
Пример компиляции:
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, compiled world!")
}
Команда для компиляции:
go build main.go
Эта команда создаст исполняемый файл main (или main.exe в Windows).
Ключевые особенности компиляции в Go:
- Статическая линковка: По умолчанию Go создает статически скомпонованные бинарные файлы. Это означает, что все необходимые библиотеки включаются в один исполняемый файл, что сильно упрощает развертывание приложения (деплой).
- Кросс-компиляция: Go из коробки поддерживает кросс-компиляцию. Можно легко собрать исполняемый файл для другой операционной системы и архитектуры, просто указав переменные окружения
GOOSиGOARCH. Например, сборка под Linux из macOS:GOOS=linux GOARCH=amd64 go build main.go - Команда
go run: Эта команда является удобной оберткой, которая сначала компилирует код во временный файл, а затем запускает его. Это удобно для быстрой разработки, но для продакшена всегда используетсяgo build.
Ответ 18+ 🔞
А, Го, блядь! Ну это ж классика, ёпта! Язык, который берёт и нахуяривает тебе один жирный бинарник, без всяких там виртуальных машинок, интерпретаторов и прочей ебли. Чистый, блядь, машинный код, как в старые добрые времена, только без этих твоих ассемблерных страданий.
Смотри, вот тебе кусок кода, обычный такой, приветственный:
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, compiled world!")
}
Чтобы из этой писанины получить что-то осязаемое, делаешь в консоли хуйню:
go build main.go
И всё, сука! Никаких танцев с бубном. Появится файлик main (или main.exe на винде, там, где кнопка «Пуск»), который можно хоть на сервер закинуть, хоть другу в зубы всучить — он запустится везде, где подходящая платформа. Никаких зависимостей, блядь, не нужно — всё уже внутри, как коньяк в бомже.
А теперь, блядь, соль и перец, почему это овердохуище удобно:
- Статическая линковка, ёбта! Это когда все библиотеки, все плюшки, всё, что нужно твоей проге, засовывается прямо в этот бинарник. Получается такой цифровой мужик-оркестр, самодостаточный, блядь. Закинул на сервер — и он работает. Никаких «ой, а где у вас libc версии 2.31?». Пиздец как удобно для деплоя, в рот меня чих-пых!
- Кросс-компиляция из коробки. Сидишь ты на маке, красивый такой, а надо собрать под линукс на каком-нибудь сервере-уродце. Да не вопрос! Выдаёшь в терминале:
GOOS=linux GOARCH=amd64 go build main.goИ всё, блядь! Получаешь бинарник под линукс, как будто так и надо. Никаких кросс-компиляторных мук, всё уже в компиляторе Го, который, видимо, сам от себя охуел от такой функциональности. - Команда
go run. Это для ленивых, типа меня, когда надо быстро проверить, работает ли твой гениальный код или ты опять какую-то хуйню написал. Она компилирует всё во временный файл, запускает и удаляет. Но для прода, понятное дело, используемgo build, чтобы получить этот монолитный, блядь, артефакт, который потом хоть в космос запускай.
Вот и весь сказ, блядь. Никакой магии, просто инженерная мысль, доведённая до ума, а не как обычно — накосячить и замутить слона из говна и палок.