Médio Go
Verificando presença com comma-ok
Enunciado
Dado um map de produtos e preços, verifique se um produto específico existe. Se existir, imprima seu preço; caso contrário, imprima uma mensagem de erro. Use a forma comma-ok.
Requisitos
- Crie um map com pelo menos 3 produtos.
- Use
preco, ok := produtos[nome]para verificar. - Imprima o preço se existir, ou "Produto não encontrado" caso contrário.
Código inicial
package main
import "fmt"
func main() {
produtos := map[string]float64{
"camiseta": 49.90,
"calça": 129.90,
"tênis": 299.90,
}
nome := "calça"
// seu código aqui
}
Saída esperada
Preço de calça: R$ 129.90
Ver dica
Use if preco, ok := produtos[nome]; ok { ... } else { ... }.
Mostrar solução
package main
import "fmt"
func main() {
produtos := map[string]float64{
"camiseta": 49.90,
"calça": 129.90,
"tênis": 299.90,
}
nome := "calça"
if preco, ok := produtos[nome]; ok {
fmt.Printf("Preço de %s: R$ %.2f\n", nome, preco)
} else {
fmt.Println("Produto não encontrado")
}
}
Passo a passo
- Criamos o map
produtoscom três pares chave-valor usando um literal. - Definimos a variável
nomecom o produto a ser buscado. - Na estrutura
if, usamospreco, ok := produtos[nome]. Isso atribui o valor aprecoe um booleano aok. - Se
okfortrue, a chave existe e imprimimos o preço formatado. - Caso contrário, imprimimos a mensagem de erro.
Por que funciona
A forma comma-ok é a maneira idiomática de verificar se uma chave existe em um map. Sem ela, você não saberia se o valor zero retornado significa que a chave não existe ou se o valor armazenado é realmente zero. O ok elimina essa ambiguidade.
Erros comuns
- Não usar comma-ok e comparar com zero:
if produtos[nome] != 0falha se o preço puder ser zero. Useok. - Esquecer o
else: se a chave não existir, o programa pode imprimir um preço zero incorretamente. - Usar
:=fora do if:preco, ok := produtos[nome]fora do if é válido, mas a forma dentro do if limita o escopo das variáveis, o que é mais limpo.
Outra forma de resolver
Você pode declarar as variáveis antes: preco, ok := produtos[nome] e depois if ok { ... }. A forma com if é mais concisa.
Saída esperada
Preço de calça: R$ 129.90