Go — это компилируемый или интерпретируемый язык?

Ответ

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.