Menu
Coddy logo textTech

Interfaz vacía

Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 16 de 68.

Hasta ahora has trabajado con interfaces que requieren métodos específicos, pero Go tiene una interfaz especial increíblemente flexible: la interfaz vacía, escrita como interface{}.

La interfaz vacía no tiene ningún requisito de métodos, lo que significa que cualquier tipo en Go la satisface automáticamente. Dado que todo tipo implementa cero métodos (como mínimo), cualquier tipo puede asignarse a una variable interface{}:

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

Esto hace que interface{} sea extremadamente útil cuando necesitas trabajar con data de type desconocidos o variables. Puedes encontrarte con esto al leer archivos de configuración, gestionar input del usuario o trabajar con APIs que devuelven diferentes data de type según la situación.

Sin embargo, dado que la interfaz vacía puede contener cualquier tipo, a menudo tendrás que determinar qué tipo está almacenado realmente en ella antes de poder usar el valor de manera significativa. Aquí es donde las aserciones de tipo y los switches de tipo (sobre los que aprenderás a continuación) se convierten en herramientas esenciales para trabajar de forma segura con valores de interface{}.

challenge icon

Desafío

Fácil

En este desafío, practicarás el trabajo con la interfaz vacía mediante la creación de un procesador de datos que pueda manejar distintos tipos de valores. Crearás una función que acepte un parámetro interface{} y procese varios tipos de datos.

Recibirás dos entradas:

  • Una cadena que representa el tipo de datos (por ejemplo, "int", "string", "bool" o "slice")
  • Una cadena que representa el valor real (por ejemplo, "42", "hello", "true" o "1,2,3")

Tu tarea es:

  1. Crear una función llamada processData que reciba un parámetro interface{} e imprima información sobre el valor
  2. Según la entrada del tipo de datos, convertir la cadena de valor al tipo de Go correspondiente:
    • Para "int": convertir a un entero
    • Para "string": usar como cadena
    • Para "bool": convertir a un valor booleano
    • Para "slice": convertir los valores separados por comas en un slice de enteros
  3. Llamar a la función processData con el valor convertido
  4. Dentro de processData, imprimir el valor y su tipo con el formato: "Value: [value], Type: [type]"

Para la entrada de tipo slice, la cadena separada por comas, como "1,2,3", debe convertirse en []int{1, 2, 3}. La función debe funcionar con cualquier tipo, ya que acepta interface{}, lo que demuestra cómo la interfaz vacía puede contener valores de cualquier tipo. Usa fmt.Printf con los verbos de formato %v y %T para mostrar el valor y el tipo, respectivamente.

Pruébalo tú mismo

package main

import (
	"fmt"
)

func main() {
	// Leer entrada
	var dataType string
	var valueStr string
	fmt.Scanln(&dataType)
	fmt.Scanln(&valueStr)
	
	// TODO: Escribe tu código debajo
	// 1. Crea la función processData que acepta interface{}
	// 2. Convierte valueStr al tipo apropiado basándote en dataType
	// 3. Llama a processData con el valor convertido
	
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Go online