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

  1. Criamos o map produtos com três pares chave-valor usando um literal.
  2. Definimos a variável nome com o produto a ser buscado.
  3. Na estrutura if, usamos preco, ok := produtos[nome]. Isso atribui o valor a preco e um booleano a ok.
  4. Se ok for true, a chave existe e imprimimos o preço formatado.
  5. 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] != 0 falha se o preço puder ser zero. Use ok.
  • 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