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 Go tem uma interface especial que é incrivelmente flexível: a interface vazia, escrita como interface{}.

A interface vazia não exige nenhum método, o que significa que qualquer tipo em Go a satisfaz automaticamente. Como todo 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 interface{} extremamente útil quando você precisa trabalhar com dados de tipos desconhecidos ou variados. Você pode se deparar com 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 nela antes de poder usar o valor de maneira significativa. É aqui que as asserções de tipo e os switches de tipo (que você aprenderá a seguir) se tornam 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 capaz de 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 que representa o tipo de dado (por exemplo, "int", "string", "bool" ou "slice")
  • Uma string que representa o valor real (por exemplo, "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 apropriado em Go:
    • Para "int": converter para inteiro
    • Para "string": usar como string
    • Para "bool": converter para booleano
    • Para "slice": converter valores separados por vírgulas em uma 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 do tipo slice, a string separada por vírgulas, como "1,2,3", deve ser convertida em []int{1, 2, 3}. A função deve funcionar com qualquer tipo, pois 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 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

Pratique por conta própria: Compilador de Go online