hostprofi.ru
Подобрать хостинг
Термин·буква G

Go (Golang)

краткое определение

Go (Golang) — компилируемый, статически типизированный язык программирования Google (2009). Отличается быстрой компиляцией, встроенной многозадачностью через goroutines и применением в облачной инфраструктуре.

Go (Golang) — компилируемый язык программирования, разработанный Google в 2007–2009 годах. Цель: заменить C++ и Java в серверной разработке при сохранении простоты синтаксиса. Компилируется в один статический бинарный файл без зависимостей от рантайма — деплой сводится к копированию одного файла. Стандартная библиотека включает HTTP-сервер, криптографию, парсинг JSON, тестирование.

Ключевые особенности

  • Goroutines: легковесные потоки (от 2 КБ стека vs 1–2 МБ для OS-потока). Планировщик Go мультиплексирует goroutines на OS-потоки. Миллион одновременных goroutines — рабочий сценарий.
  • Channels: CSP-примитив (Communicating Sequential Processes) для безопасного обмена данными между goroutines. ch := make(chan int, 100)
  • Статическая линковка: CGO_ENABLED=0 go build создаёт бинарник без системных библиотек. Работает в scratch Docker-образе (< 20 МБ).
  • Быстрая компиляция: миллион строк Go компилируется быстрее, чем 100 000 строк C++.
  • GC с малыми паузами: в Go 1.14+ паузы GC < 1 мс при типичной нагрузке.

История

Go начал разрабатывать Роберт Грисемер (Robert Griesemer), Роб Пайк (Rob Pike) и Кен Томпсон (Ken Thompson) в Google в 2007 году. Первый публичный релиз — ноябрь 2009 года. Go 1.0 (март 2012) установил обратную совместимость API. Go 1.5 (2015) — самохостящийся компилятор (написан на Go, не на C). Go 1.18 (2022) — дженерики (Generics), долгожданная функциональность. Go 1.21 (2023) — стандартная библиотека для структурированного логирования (slog), slices/maps/cmp пакеты. Написаны на Go: Docker, Kubernetes, Terraform, Prometheus, CockroachDB, InfluxDB.

Применение в хостинге

Go-сервисы запускаются напрямую как бинарный файл: ./myapp -port 8080. Через systemd-юнит или в Docker. Reverse proxy (Nginx или Traefik) стоит перед Go-сервисом и обрабатывает SSL, сжатие, статику. Типичные фреймворки: Gin (высокопроизводительный HTTP), Echo, Fiber (совместим с Express API), Chi. Минимальное потребление RAM: Go-сервер начинает работу с 10–30 МБ RAM против 100–500 МБ для JVM-приложений.

Go vs Java vs Node.js

ПараметрGo 1.22Java (JVM) 21Node.js 22
Холодный старт~50 мс500–2000 мс (JVM warmup)~100 мс
RAM (idle)10–30 МБ100–500 МБ30–80 МБ
КонкурентностьGoroutines + channelsVirtual Threads (Java 21)Event loop (single-thread)
ДеплойОдин бинарникJAR + JVMnode_modules + runtime

На что обращать внимание

На VPS для Go-сервиса достаточно 1 ГБ RAM для большинства приложений. Кросс-компиляция: GOOS=linux GOARCH=amd64 go build собирает Linux-бинарник с macOS или Windows. В Docker — используй многоступенчатую сборку: builder-образ с Go toolchain + scratch или distroless итоговый образ. Убедитесь, что приложение корректно обрабатывает SIGTERM для graceful shutdown — иначе при перезапуске контейнера активные запросы обрываются.

Другие термины