Projeto de exemplo de uma API REST em Go.
main.go: ponto de entrada da aplicaçãohandlers/: camada de controladores HTTPservices/: camada de regras de negóciomodels/: definição dos modelos de dados
go run main.goNo terminal, navegue até a raiz do projeto (onde está o Dockerfile):
cd go-pocConstrua a imagem Docker (substitua "go-api" pelo nome que preferir):
docker build -t go-api .Escanear vulnerabilidades.
docker scout recommendations
#or
docker scout recommendations local://go-api:latestRode o container expondo a porta 8080:
docker run -p 8080:8080 go-apiPronto! Sua API estará acessível em http://localhost:8080/user.
A publicação da imagem Docker no Docker Hub é feita automaticamente pela pipeline do GitHub Actions quando um Pull Request recebe uma label no formato:
docker-publish:vX.Y.Z
Exemplo: docker-publish:v1.2.3
Como funciona:
- Adicione a label ao PR com o valor desejado (versão semver, com ou sem o prefixo
v). - O workflow irá extrair a versão da label e publicar a imagem no Docker Hub com a tag correspondente.
- A imagem também será publicada com a tag
latest.
Pré-requisitos:
- Os segredos
DOCKERHUB_USERNAMEeDOCKERHUB_TOKENdevem estar configurados no repositório (Settings > Secrets and variables > Actions > New repository secret).
Importante: Não é mais necessário adicionar steps manuais de push no workflow. Todo o processo é automatizado via label no PR.
Para rodar os testes unitários do projeto, execute o comando abaixo dentro da pasta src:
cd src
go test ./...
go test -cover ./...Precisa de minikube instalado no ambiente de dev
Para start do minikube
minikube startIniciar o dashboard do minikube
minikube dashboardPara aplicar os manifests do Kubernetes que estão na pasta k8s, utilize o comando abaixo no terminal, dentro da raiz do projeto:
kubectl apply -f k8s/Esse comando irá criar (ou atualizar) todos os recursos definidos nos arquivos YAML dentro da pasta k8s, incluindo deployment e service.
Se quiser aplicar apenas um arquivo específico, use:
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yamlApós aplicar, para verificar os recursos criados:
kubectl get pods
kubectl get servicesSe precisar expor o serviço no Minikube, use:
minikube service go-api-serviceAssim, você acessa facilmente a API pelo navegador. Se precisar de mais algum comando ou ajuste, só avisar!
Instale o Ingress Controller no Minikube:
minikube addons enable ingressAplique o manifest:
kubectl apply -f k8s/ingress.yaml#minikube tunnel O comando abaixo cria um túnel de rede e expõe o Ingress Controller na porta 80 do seu host, resolvendo o problema de roteamento:
minikube tunnelDeixe esse comando rodando em um terminal separado.
Agora é possivel testar usando:
curl -H "Host: go-api.local" http://localhost/userNo Minikube (especialmente com o driver docker no macOS), o Ingress geralmente é exposto em http://localhost, e não diretamente no IP da VM. Por isso, o comando curl com -H "Host: go-api.local" para localhost funciona.
Se quiser acessar pelo navegador, basta garantir que o /etc/hosts tenha:
127.0.0.1 go-api.localou
localhost go-api.localAssim, você pode acessar http://go-api.local/user no navegador.
- Go 1.24+
- Implementar rotas e lógica de negócio
- Adicionar testes