Go 1.22 serverless-функции с изолированными рантаймами
Обработчики Go 1.22 в Lambda-стиле Handler(event, context) в изолированных контейнерах: зависимости в go.mod, CGO компилируется при деплое, быстрый холодный старт — без Kubernetes и кастомного Dockerfile.
Обновлено: 2026-06-28
Кратко
Суть ответа
Go 1.22 serverless-функции с изолированными рантаймами. Handler(event, context) в Lambda-стиле: парсите event["body"] для POST через шлюз и возвращайте statusCode + body. CGO-пакеты из go.mod компилируются при деплое — без Dockerfile и fly.toml.
Когда подходит и когда нет
- Высокопроизводительные API с минимальными накладными расходами
- CGO-зависимости: sqlite3, crypto-биндинги
- Teams already writing Go services who want consistent language across the stack
На что обратить внимание
- Если весь стек уже живёт на Go в Kubernetes, миграция ради отдельных функций не оправдана.
- Сервисам с состоянием и WebSocket на Go лучше в постоянном процессе.
Ситуация: нагрузка и где обычно ломается
Когда Go в serverless сложнее, чем должно быть
- Edge isolates do not support CGO or native system libraries
- AWS Lambda Go requires a custom bootstrap binary and non-standard handler wiring
- Mixing Go functions with Node.js or Python APIs meant separate platforms or Lambda layer hacks
AWS Lambda требует упаковки Go-бинарника в zip или container image; каждое обновление — пересборка и повторная загрузка образа.
Компромиссы
Когда Go в serverless избыточен
Если весь стек уже живёт на Go в Kubernetes, миграция ради отдельных функций не оправдана.
Сервисам с состоянием и WebSocket на Go лучше в постоянном процессе.
Как Inquir помогает в этом сценарии
Go 1.22 в managed serverless-контейнерах
Handler(event, context) в Lambda-стиле: парсите event["body"] для POST через шлюз и возвращайте statusCode + body. CGO-пакеты из go.mod компилируются при деплое — без Dockerfile и fly.toml.
Один шлюз обслуживает Go-функции, cron-расписания и вебхуки — отдельный scheduler-сервис на Go не нужен.
Что вы получаете на платформе
Что даёт рантайм Go 1.22
Lambda-совместимый handler
func Handler(event map[string]interface{}, ctx map[string]interface{}) — тот же контракт, что у Node.js и Python на платформе.
Поддержка CGO
CGO-зависимости объявляются в go.mod; sqlite3 и crypto-библиотеки с C-биндингами компилируются при деплое.
Быстрый холодный старт
Go-бинарник стартует быстро — один из лучших показателей холодного старта среди serverless-рантаймов.
Модули
go.mod и go.sum — стандартный модульный workflow Go без изменений.
Что сделать дальше, по шагам
Как задеплоить Go функцию
Написать Handler
func Handler(event, ctx map[string]interface{}) (interface{}, error) — парсите строку event["body"] для JSON со шлюза.
Добавить go.mod
Стандартный go.mod с зависимостями; CGO-пакеты объявляются там же.
Задеплоить
Загрузите через CLI или браузерный редактор — URL шлюза готов.
Пример кода
Go serverless function: JSON API handler
Lambda-compatible pattern. Parse event["body"] when the gateway sends a JSON string; return statusCode + body for HTTP routes. CGO dependencies in go.mod compile at deploy.
package main import ( "encoding/json" ) func parsePayload(event map[string]interface{}) map[string]interface{} { if s, ok := event["body"].(string); ok && s != "" { var out map[string]interface{} if err := json.Unmarshal([]byte(s), &out); err != nil || out == nil { return map[string]interface{}{} } return out } return event } func Handler(event map[string]interface{}, ctx map[string]interface{}) (interface{}, error) { payload := parsePayload(event) name, _ := payload["name"].(string) if name == "" { name = "World" } body, _ := json.Marshal(map[string]string{"message": "Hello, " + name}) return map[string]interface{}{ "statusCode": 200, "headers": map[string]interface{}{"Content-Type": "application/json"}, "body": string(body), }, nil }
Когда подходит и когда нет
Когда выбирать Go
Когда это уместно
- Высокопроизводительные API с минимальными накладными расходами
- CGO-зависимости: sqlite3, crypto-биндинги
- Teams already writing Go services who want consistent language across the stack
Когда лучше выбрать другое
- Сервисы с состоянием — WebSocket или постоянные соединения
Вопросы и ответы
Вопросы и ответы
Это net/http или Lambda-стиль?
Lambda-стиль: экспортируйте Handler(event, context) и парсите поля шлюза из event map. Свой http.ListenAndServe сервер не нужен — платформа вызывает Handler на каждый запрос.
Как добавить CGO-зависимость?
Добавьте пакет в go.mod — 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.