Menu
Coddy logo textTech

Interface Vazia

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

Até agora você trabalhou com interfaces que exigem métodos específicos, mas o Go tem uma interface especial que é incrivelmente flexível: a interface vazia, escrita como interface{}.

A interface vazia não possui nenhum requisito de método, o que significa que qualquer tipo em Go a satisfaz automaticamente. Como cada tipo implementa zero métodos (no mínimo), qualquer tipo pode ser atribuído a uma variável interface{}:

var anything interface{}
anything = 42        // int
anything = "hello"   // string
anything = true      // bool
anything = []int{1, 2, 3}  // slice

Isso torna o interface{} extremamente útil quando você precisa trabalhar com dados de tipos desconhecidos ou variados. Você pode encontrar isso ao ler arquivos de configuração, lidar com a entrada do usuário ou trabalhar com APIs que retornam diferentes tipos de dados dependendo da situação.

No entanto, como a interface vazia pode conter qualquer tipo, você frequentemente precisará determinar qual tipo está realmente armazenado dentro dela antes de poder usar o valor de forma significativa. É aqui que as asserções de tipo (type assertions) e as alternâncias de tipo (type switches) (sobre as quais você aprenderá a seguir) tornam-se ferramentas essenciais para trabalhar com segurança com valores interface{}.

challenge icon

Desafio

Fácil

Neste desafio, você praticará o trabalho com a interface vazia criando um processador de dados que pode lidar com diferentes tipos de valores. Você criará uma função que aceita um parâmetro interface{} e processa vários tipos de dados.

Você receberá duas entradas:

  • Uma string representando o tipo de dado (ex: "int", "string", "bool", ou "slice")
  • Uma string representando o valor real (ex: "42", "hello", "true", ou "1,2,3")

Sua tarefa é:

  1. Criar uma função chamada processData que recebe um parâmetro interface{} e imprime informações sobre o valor
  2. Com base na entrada do tipo de dado, converter a string do valor para o tipo Go apropriado:
    • Para "int": converter para inteiro
    • Para "string": usar como string
    • Para "bool": converter para booleano
    • Para "slice": converter valores separados por vírgula para um slice de inteiros
  3. Chamar a função processData com o valor convertido
  4. Dentro de processData, imprimir o valor e seu tipo no formato: "Value: [value], Type: [type]"

Para a entrada de slice, a string separada por vírgulas como "1,2,3" deve ser convertida para []int{1, 2, 3}. A função deve funcionar com qualquer tipo, já que aceita interface{}, demonstrando como a interface vazia pode conter valores de qualquer tipo. Use fmt.Printf com os verbos de formatação %v e %T para exibir o valor e o tipo, respectivamente.

Experimente você mesmo

package main

import (
	"fmt"
)

func main() {
	// Ler a entrada
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: Escreva seu código abaixo
	// 1. Crie a função processData que aceita interface{}
	// 2. Converta valueStr para o tipo apropriado com base em dataType
	// 3. Chame processData com o valor convertido
	
}
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