Por que Go é o novo rei do Serverless (e ponto final)?
\n\nQuando se fala em arquitetura serverless, a maioria dos desenvolvedores pensa em JavaScript (Node.js) ou Python. É compreensível: são simples, populares e cheios de tutoriais. Mas há um problema: o cold start.
\n\nImagine: você executa uma função Lambda em Python. A primeira requisição após um período de inatividade leva de 3 a 5 segundos. O usuário espera. O negócio perde dinheiro. Agora imagine a mesma função em Go: 100 a 200 milissegundos. Sente a diferença?
\n\nGo (Golang) é uma linguagem criada nos laboratórios do Google para resolver problemas onde desempenho e simplicidade são cruciais. No mundo serverless, ela oferece três vantagens principais:
\n- \n
- Cold start instantâneo — o binário compilado é executado em milissegundos. \n
- Baixo consumo de memória — você paga menos e obtém mais. \n
- Um único binário — sem dependências, é só subir e pronto. \n
Neste artigo, vamos explorar como escrever funções serverless em Go para AWS Lambda, com exemplos reais de código e comparações com alternativas. Se você está cansado de esperar a função Python "aquecer", seja bem-vindo.
\n\nComo configurar AWS Lambda com Go: guia passo a passo
\n\nAntes de escrever código, vamos entender as ferramentas necessárias. Para trabalhar com Go na AWS Lambda, você vai precisar de:
\n- \n
- Go instalado (versão 1.21+). \n
- Utilitário
aws-cli(ou o console da AWS). \n - Noção básica do que é um Handler. \n
Passo 1. Crie o projeto
\nCrie um novo diretório e inicialize o módulo:
\nmkdir go-lambda-example\ncd go-lambda-example\ngo mod init example.com/lambda\n\nPasso 2. Escreva a primeira função
\nCrie o arquivo main.go. Este é um exemplo mínimo de função serverless em Go que processa JSON e retorna uma resposta:
package main\n\nimport (\n "context"\n "fmt"\n\n "github.com/aws/aws-lambda-go/lambda"\n)\n\n// MyEvent — estrutura do evento de entrada\ntype MyEvent struct {\n Name string `json:"name"`\n}\n\n// MyResponse — estrutura da resposta\ntype MyResponse struct {\n Message string `json:"message"`\n Status int `json:"status"`\n}\n\n// HandleRequest — handler principal da Lambda\nfunc HandleRequest(ctx context.Context, event MyEvent) (MyResponse, error) {\n if event.Name == "" {\n return MyResponse{Message: "Olá, anônimo!", Status: 200}, nil\n }\n return MyResponse{\n Message: fmt.Sprintf("Olá, %s! Bem-vindo ao serverless com Go.", event.Name),\n Status: 200,\n }, nil\n}\n\nfunc main() {\n lambda.Start(HandleRequest)\n}\n\nImportante: A função deve aceitar context.Context e retornar (T, error). Esse é o padrão para Go Lambda.
Passo 3. Compile para Linux
\nA AWS Lambda roda em Linux, então o binário precisa ser compilado para esse sistema:
\nGOOS=linux GOARCH=amd64 go build -o bootstrap main.go\nObserve: o arquivo de saída deve se chamar bootstrap — é um requisito da AWS Lambda para Go.
Passo 4. Empacote e faça o upload
\nCompacte o binário em um arquivo ZIP:
\nzip function.zip bootstrap\nAgora faça o upload para a AWS Lambda pelo console ou CLI. Pronto! Sua primeira função serverless em Go está funcionando.
\n\nExemplo avançado: integração com S3 e DynamoDB
\nAgora que você já domina o básico, vamos criar algo útil. Suponha que precisamos processar uploads de arquivos no S3 e salvar metadados no DynamoDB. Esse é um cenário clássico para serverless.
\n\nInstale os SDKs necessários:
\ngo get github.com/aws/aws-lambda-go/events\ngo get github.com/aws/aws-sdk-go-v2/service/s3\ngo get github.com/aws/aws-sdk-go-v2/service/dynamodb\n\