Рантайм · Inquir Compute

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 лучше в постоянном процессе.

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 функцию

1

Написать Handler

func Handler(event, ctx map[string]interface{}) (interface{}, error) — парсите строку event["body"] для JSON со шлюза.

2

Добавить go.mod

Стандартный go.mod с зависимостями; CGO-пакеты объявляются там же.

3

Задеплоить

Загрузите через 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.

handler.go
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.