e57de50bc287a32f56284e6d3986ebf012d08f0a
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.
Description
Languages
Go
100%