Menu
Coddy logo textTech

Asserções de Tipo

Parte da seção Lógica & Fluxo do Journey de GO da Coddy — lição 17 de 68.

Ao trabalhar com variáveis de interface, você frequentemente precisa acessar o valor concreto real armazenado dentro delas. É aqui que as asserções de tipo (type assertions) entram em cena — elas permitem que você extraia e use o valor subjacente com segurança.

Uma asserção de tipo usa esta sintaxe: value, ok := interfaceVariable.(Type). O primeiro valor de retorno é o valor extraído do tipo especificado, e o segundo é um booleano que informa se a asserção foi bem-sucedida.

var data interface{} = 42

number, ok := data.(int)
if ok {
    fmt.Println("It's an integer:", number)
} else {
    fmt.Println("Not an integer")
}

A variável ok é crucial para a segurança. Se você tentar fazer a asserção para o tipo errado, ok será false, e value será o valor zero desse tipo. Sem verificar ok, uma asserção de tipo malsucedida faria seu programa entrar em pânico.

Asserções de tipo são essenciais ao trabalhar com valores interface{}, permitindo que você converta a interface genérica de volta para um tipo específico para que possa usar seus métodos e operações.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Neste desafio, você praticará o uso de asserções de tipo (type assertions) para extrair e trabalhar com segurança com valores concretos de variáveis de interface. Você criará um analisador de dados que processa diferentes tipos de valores armazenados em interfaces vazias.

Você receberá duas entradas:

  • Uma string representando o tipo de dado a ser verificado (ex: "int", "string" ou "bool")
  • Uma string representando o valor real (ex: "42", "hello" ou "true")

Sua tarefa é:

  1. Converta a string de valor para o tipo Go apropriado e armazene-a em uma variável interface{}:
    • Para "int": converta para inteiro
    • Para "string": use como string
    • Para "bool": converta para booleano
  2. Use asserção de tipo para verificar se a variável de interface contém o tipo esperado especificado na primeira entrada
  3. Se a asserção de tipo for bem-sucedida, imprima: "Success: [value] is a [type]"
  4. Se a asserção de tipo falhar, imprima: "Failed: value is not a [type]"

Você deve usar a sintaxe de asserção de tipo segura com a variável ok para verificar se a asserção foi bem-sucedida. O desafio testa sua compreensão de como extrair com segurança valores concretos de variáveis de interface sem causar o pânico (panic) do seu programa.

Para a conversão booleana, "true" deve ser convertido para true e qualquer outra string deve ser convertida para false. Use o pacote strconv para a conversão de string para inteiro.

Folha de consulta

As asserções de tipo (type assertions) permitem extrair valores concretos de variáveis de interface usando a sintaxe value, ok := interfaceVariable.(Type):

var data interface{} = 42

number, ok := data.(int)
if ok {
    fmt.Println("It's an integer:", number)
} else {
    fmt.Println("Not an integer")
}

A variável ok indica se a asserção foi bem-sucedida. Se for falsa, value será o valor zero (zero value) daquele tipo. Sempre verifique ok para evitar panics decorrentes de asserções malsucedidas.

Experimente você mesmo

package main

import (
	"fmt"
	"strconv"
)

func main() {
	// Ler a entrada
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// Variável para armazenar o valor da interface
	var interfaceValue interface{}
	
	// TODO: Escreva seu código abaixo
	// 1. Converta valueStr para o tipo apropriado com base em dataType e armazene em interfaceValue
	// 2. Use asserção de tipo para verificar se interfaceValue contém o tipo esperado
	// 3. Imprima a mensagem apropriada de sucesso ou falha
	
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo