Go 1.22 serverless-функции с изолированными рантаймами
Go 1.22 handlers в net/http-стиле в изолированных контейнерах: нативные Go-зависимости, CGO через слои, быстрый cold start — без Kubernetes и custom Dockerfile.
Обновлено: 2026-04-20
Кратко
Суть ответа
Go 1.22 serverless-функции с изолированными рантаймами. net/http-стиль handler, CGO-зависимости через слои, быстрый бинарь — без Dockerfile и fly.toml. Деплой через браузер или CLI.
Когда подходит и когда нет
- Высокопроизводительные API с минимальным overhead
- CGO-зависимости: sqlite3, crypto-биндинги
- Teams already writing Go services who want consistent language across the stack
На что обратить внимание
- Если весь стек уже на 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 или постоянными соединениями
Вопросы и ответы
Вопросы и ответы
Поддерживается 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.