Uma ferramenta CLI desenvolvida em Go para gerar projetos com estrutura padronizada usando Chi router, CORS configurado e utilitários JSON prontos para uso. Acelere o desenvolvimento de suas APIs REST criando uma base sólida e organizida em segundos.
- 🚀 Geração rápida de projetos - Crie um projeto completo em segundos
- 📁 Estrutura padronizada - Organização seguindo padrões da comunidade Go
- 🌐 Chi Router v5 - Router HTTP rápido e leve já configurado
- 🔄 CORS configurado - Suporte completo para requisições cross-origin
- 🛡️ Middleware essencial - Logger, Recovery e RequestID incluídos
- 🔧 Utilitários JSON - Funções prontas para encode/decode JSON
- 📦 Dependências automáticas - go.mod e todas as dependências instaladas
- 🏥 Health Check - Endpoint
/healthconfigurado por padrão
- Go 1.24 ou superior
- Git (para instalação via GitHub)
go install github.com/josevitorrodriguess/goproject-generator@latestgit clone https://github.com/josevitorrodriguess/goproject-generator.git
cd goproject-generator
go build -o gpg main.gogoproject-generator create meu-projetogoproject-generator create minha-api --port 8080 --module github.com/usuario/minha-apigoproject-generator create --help| Flag | Shorthand | Descrição | Valor padrão |
|---|---|---|---|
--port |
-p |
Define a porta do servidor | 3000 |
--module |
-m |
Nome do módulo Go | Nome do projeto |
meu-projeto/
├── go.mod # Módulo Go com dependências
├── cmd/
│ └── meu-projeto/
│ └── main.go # Ponto de entrada da aplicação
└── internal/
├── api/
│ ├── api.go # Struct do servidor e inicialização
│ └── router.go # Rotas, middleware e handlers
└── jsonutils/
└── json_utils.go # Utilitários para JSON
- Ponto de entrada da aplicação
- Carregamento de variáveis de ambiente (.env)
- Inicialização do servidor na porta 3050
- Configuração do servidor HTTP
- Struct
Apiprincipal - Método
New()para criação da instância - Inicialização do Chi router
- Configuração de middleware e rotas
- Middleware configurado:
Logger- Log de todas as requisiçõesRecoverer- Recovery automático de panicsRequestID- ID único para cada requisiçãoCORS- Configuração completa para cross-origin
- Rotas padrão:
GET /health- Health check endpoint
- Handler de exemplo com response padronizada
EncodeJson[T]()- Função genérica para encoding JSONDecodeJson[T]()- Função genérica para decoding JSONSendError()- Envio padronizado de erros JSON
-
Entre no diretório:
cd meu-projeto -
Execute o servidor:
go run cmd/meu-projeto/main.go
-
Teste o health check:
curl http://localhost:3050/health
Response esperado:
{ "service": "api", "status": "OK" }
O projeto é gerado com as seguintes dependências automaticamente instaladas:
github.com/go-chi/chi/v5- Router HTTP performáticogithub.com/go-chi/chi/- Middleware adicionalgithub.com/go-chi/cors- Middleware CORSgithub.com/joho/godotenv- Carregamento de variáveis de ambiente
- Logger - Log automático de todas as requisições
- Recoverer - Recovery de panics com graceful degradation
- RequestID - Tracking de requisições com ID único
- CORS - Suporte completo para requisições cross-origin
// Encoding com tipos genéricos
response := map[string]string{"status": "ok"}
jsonutils.EncodeJson(w, r, http.StatusOK, response)
// Decoding com tipos genéricos
type UserRequest struct {
Name string `json:"name"`
}
user, err := jsonutils.DecodeJson[UserRequest](r)
// Envio de erros padronizado
jsonutils.SendError(w, r, http.StatusBadRequest, "Invalid input")Endpoint /health configurado retornando:
{
"status": "OK",
"service": "api"
}Após executar gpg create minha-api, você terá:
cd minha-api
go run cmd/minha-api/main.goConsole output:
Server is running on http://localhost:3050
Testando:
curl http://localhost:3050/health
# {"service":"api","status":"OK"}No arquivo internal/api/router.go:
func (api *Api) setupRoutes() {
api.Router.Get("/health", api.handleHealth)
// Adicione suas rotas aqui
api.Router.Get("/users", api.handleGetUsers)
api.Router.Post("/users", api.handleCreateUser)
}- Faça um fork do projeto
- Crie uma branch para sua feature:
git checkout -b feature/nova-feature
- Commit suas mudanças:
git commit -am 'feat: adiciona nova feature' - Push para a branch:
git push origin feature/nova-feature
- Abra um Pull Request
feat:nova funcionalidadefix:correção de bugdocs:atualização de documentaçãorefactor:refatoração sem mudança de funcionalidadetest:adição ou correção de testes
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Cobra - CLI framework
- Chi Router - HTTP router
- Chi CORS - CORS middleware
- GoDotEnv - Environment variables
⭐ Curtiu o projeto? Deixe uma estrela no repositório!