2.9 KiB
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
ProducteInventory, guardando os produtos em ummap[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,viewecontroller, mantendo cada parte independente. - Structs e métodos — modelagem de dados com
Product/Inventorye métodos (func (e *Inventory) ...). - Maps — armazenamento em
map[ProductID]Productpara busca, atualização e remoção, o padrão comma-ok (v, ok := m[k]) e a função embutidadelete(m, chave). - Tipos nomeados — criação de
type ProductID intpara dar semântica aos identificadores. - Leitura de entrada — uso de
bufio.Reader - Tratamento de strings —
strings.TrimSpacepara limpar os espaços e quebras de linhas da entrada estrconv(Atoi,ParseFloat) para converter texto em tipos numéricos. - Tratamento de erros — múltiplos retornos
(valor, error)e verificação comif err != nil. - Formatação de saída —
fmt.Printfcom verbos como%d,%se%.2f.