48/100 Dias de Golang - Aplicação para buscar previsão do tempo - Parte 5
Table of Contents
#
Aplicação para buscar previsão do tempo - Parte 5
Hoje vamos dar uma olhada em como organizar a aplicação, separar os arquivos, separar as regras de negócio da aplicação e ver a estrutura de pastas de projetos golang. Encontrei várias fontes sobre esse tema, muitas discussões e a resposta é que depende do tamanho do projeto, qual arquitetura você pretende usar e vários outros fatores. Vou deixar uma lista dos melhores artigos aqui:
- Organizing a Go module - Própria documentação do Golang fala sobre isso, está organizada por tipo de projeto, bem simples e direto ao ponto
- Layout padrão de projetos em Go - Esse aqui é muito legal! Descreve os diretórios da aplicação e mostra exemplos em grandes repositórios. Veja como é a pasta
/cmd
do Prometheus - Organize Like a Pro: A Simple Guide to Go Project Folder Structures - Esse é muito bom. Mostra várias arquiteturas, Domain-Driven Design, Clean Architecture, Hexagonal Architecture, Monorepo Structure, CQRS (Command Query Responsibility Segregation), …
Vou organizar a aplicação da seguinte forma:
├── cmd
│ ├── cidade.go
│ ├── root.go
│ └── tempo.go
├── go.mod
├── go.sum
├── internal
│ ├── api
│ │ ├── cidade.go
│ │ └── tempo.go
│ └── models
│ ├── cidade.go
│ └── tempo.go
├── pkg
│ └── client
│ └── client.go
├── main.go
cmd/
: Pasta responsável por comandos da linha de comando (CLI) - estrutura que o próprio Cobra criainternal/
: Contém código privado à aplicação ,não pode ser importado por outros projetos. Lógica de negócios e manipulação de dados. Dividi entreapi
emodels
. Noapi
temos a lógica de chamada a API externa emodels
as structs que criamos para nossa aplicação.pkg/
Pasta para código reutilizável, que pode inclusive ser importado por outros projetos. Nesse caso criei um client HTTP
No próximo post vou mostrar como ficou o código de cada arquivo.