Files
controle-de-estoque-cli/README.md
T
2026-07-15 01:00:03 -03:00

2.9 KiB

Controle de Estoque CLI

Aplicação de linha de comando (CLI) em Go para gerenciar um estoque de produtos. Projeto de estudo focado em organização de código em camadas (MVC) e no uso de estruturas de dados nativas do Go.

Funcionalidades

  • Adicionar produtos ao estoque (nome, categoria, preço e quantidade)
  • Listar todos os produtos cadastrados
  • Atualizar um campo específico de um produto pelo ID
  • Deletar um produto pelo ID

Como executar

Requer Go 1.26 ou superior instalado.

go run .

Para compilar um binário:

go build -o controle-de-estoque
./controle-de-estoque

Uso

Ao iniciar, o programa exibe um menu. Escolha uma opção pelo número ou pelo nome:

1 / adicionar - Adiciona o produto no estoque
2 / listar    - Lista todos os produtos do estoque
3 / atualizar - Atualiza um produto do estoque
4 / deletar   - Deleta um produto do estoque
0 / sair      - Sair do programa

Ao atualizar, informe o ID do produto e o campo desejado (nome, categoria, preco ou quantidade), seguido do novo valor.

Estrutura do projeto

O código é organizado em camadas, separando responsabilidades:

.
├── main.go                    # Ponto de entrada: monta as dependências e inicia a CLI
├── controller/
│   └── controller.go          # Orquestra o fluxo entre a entrada do usuário e o modelo
├── view/
│   └── view.go                # Entrada e saída no terminal (menus, leitura, exibição)
└── model/
    └── inventory.go           # Regras de negócio e armazenamento dos produtos (map em memória)
  • model — define Product e Inventory, guardando os produtos em um map[ProductID]Product
  • view — responsável por toda interação com o terminal.
  • controller — recebe a opção do usuário e chama as operações do modelo.

Os dados são mantidos apenas em memória: ao encerrar o programa, o estoque é perdido.

Conceitos aprendidos

  • Arquitetura em camadas (MVC) — separação de responsabilidades entre model, view e controller, mantendo cada parte independente.
  • Structs e métodos — modelagem de dados com Product/Inventory e métodos (func (e *Inventory) ...).
  • Maps — armazenamento em map[ProductID]Product para busca, atualização e remoção, o padrão comma-ok (v, ok := m[k]) e a função embutida delete(m, chave).
  • Tipos nomeados — criação de type ProductID int para dar semântica aos identificadores.
  • Leitura de entrada — uso de bufio.Reader
  • Tratamento de stringsstrings.TrimSpace para limpar os espaços e quebras de linhas da entrada e strconv (Atoi, ParseFloat) para converter texto em tipos numéricos.
  • Tratamento de erros — múltiplos retornos (valor, error) e verificação com if err != nil.
  • Formatação de saídafmt.Printf com verbos como %d, %s e %.2f.