Pular para o conteúdo principal

victorstein.dev

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:

  1. 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
  2. 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
  3. 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 cria
  • internal/: 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 entre api e models. No api temos a lógica de chamada a API externa e models 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.