Go 1.22 serverless-функции с изолированными рантаймами
Go 1.22 handlers в net/http-стиле в изолированных контейнерах: нативные Go-зависимости, CGO через слои, быстрый cold start — без Kubernetes и custom Dockerfile.
Last updated: 2026-04-20
Answer first
Direct answer
Go 1.22 serverless-функции с изолированными рантаймами. net/http-стиль handler, CGO-зависимости через слои, быстрый бинарь — без Dockerfile и fly.toml. Деплой через браузер или CLI.
When it fits
- Высокопроизводительные API с минимальным overhead
- CGO-зависимости: sqlite3, crypto-биндинги
- Teams already writing Go services who want consistent language across the stack
Tradeoffs
- Если весь стек уже на Go в Kubernetes — миграция ради отдельных функций не оправдана.
- Stateful сервисы с WebSocket на Go лучше живут в постоянном процессе.
Нагрузка и где ломается
Когда Go serverless сложнее, чем должно быть
- Edge isolates do not support CGO or native system libraries
- AWS Lambda Go runtime requires a custom bootstrap binary per function
- Mixing Go functions with Node.js or Python APIs meant separate platforms or Lambda layers hacks
AWS Lambda требует упаковки Go-бинаря в zip или container image. Обновление — пересборка и повторная загрузка образа.
Компромиссы
Когда Go serverless избыточен
Если весь стек уже на Go в Kubernetes — миграция ради отдельных функций не оправдана.
Stateful сервисы с WebSocket на Go лучше живут в постоянном процессе.
Как помогает Inquir
Go 1.22 в managed serverless-контейнерах
net/http-стиль handler, CGO-зависимости через слои, быстрый бинарь — без Dockerfile и fly.toml. Деплой через браузер или CLI.
Один шлюз для Go-функций, cron-расписаний и вебхуков — без отдельного scheduler-сервиса на Go.
Что получаете
Что даёт Go 1.22 рантайм
net/http handler
`func Handler(w http.ResponseWriter, r *http.Request)` — стандартный Go HTTP-обработчик.
CGO поддержка
CGO-зависимости через слои; sqlite3, crypto-библиотеки с C-биндингами.
Быстрый cold start
Go-бинарь стартует быстро — один из лучших cold start среди serverless рантаймов.
Модули
go.mod / go.sum — стандартный Go-модульный workflow без изменений.
Что делать дальше
Как задеплоить Go функцию
Написать handler
`func Handler(w http.ResponseWriter, r *http.Request) { ... }` — стандартный net/http.
Добавить go.mod
Стандартный go.mod с зависимостями; CGO-пакеты — через слой.
Задеплоить
Загрузить через CLI или браузерный редактор; URL шлюза готов.
Пример кода
Go serverless function: fast JSON API handler
Standard net/http pattern. Reads from environment, returns JSON. CGO dependencies work in the container build.
package main import ( "encoding/json" "net/http" "os" ) type Response struct { Status string `json:"status"` Version string `json:"version"` Region string `json:"region,omitempty"` } func Handler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "method not allowed", http.StatusMethodNotAllowed) return } resp := Response{ Status: "ok", Version: "1.0.0", Region: os.Getenv("INQUIR_REGION"), } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(resp) }
Когда подходит
Когда выбирать Go
Когда это уместно
- Высокопроизводительные API с минимальным overhead
- CGO-зависимости: sqlite3, crypto-биндинги
- Teams already writing Go services who want consistent language across the stack
Когда лучше не трогать
- Stateful сервисы с WebSocket или постоянными соединениями
FAQ
Вопросы и ответы
Поддерживается Lambda-стиль handler?
Inquir использует net/http стиль: `Handler(w http.ResponseWriter, r *http.Request)`. Тело запроса читается из `r.Body`.
Как добавить CGO зависимость?
Создать слой с заголовочными файлами и библиотекой; подключить к функции. CGO компилируется под рантайм-архитектуру.
How does cold start compare to Node.js?
Go binaries typically start faster than Node.js for the same workload. Use hot containers for steady traffic patterns regardless of language for consistent p95 latency.