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, que se escribe como interface{}. Desde Go 1.18 también puedes escribirla como any, un alias integrado que significa exactamente 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. Como todos los tipos implementan cero métodos (como mínimo), cualquier tipo se puede asignar a una variable interface{}:
var anything interface{}
anything = 42 // int
anything = "hello" // string
anything = true // bool
anything = []int{1, 2, 3} // sliceEsto hace que interface{} sea extremadamente útil cuando necesitas trabajar con datos de tipos desconocidos o variables. Puedes encontrarte con esto al leer archivos de configuración, gestionar entradas del usuario o trabajar con API que devuelven distintos tipos de datos 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 se almacena realmente en ella antes de poder usar el valor de forma significativa. Aquí es donde las aserciones de tipo y las instrucciones de selección de tipo (que aprenderás a continuación) se convierten en herramientas esenciales para trabajar de forma segura con valores interface{}.
Desafío
FácilEn este desafío, practicarás cómo trabajar con la interfaz vacía creando 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 dato (por ejemplo,
"int","string","bool"o"slice") - Una cadena que representa el valor propiamente dicho (por ejemplo,
"42","hello","true"o"1,2,3")
Tu tarea es:
- Crear una función llamada
processDataque tome un parámetrointerface{}e imprima información sobre el valor - Según el tipo de dato de entrada, convertir la cadena del valor al tipo de Go correspondiente:
- Para
"int": convertir a entero - Para
"string": usar como cadena - Para
"bool": convertir a booleano - Para
"slice": convertir los valores separados por comas en un slice de enteros
- Para
- Llamar a la función
processDatacon el valor convertido - 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() {
// Lee la entrada
var dataType string
var valueStr string
fmt.Scanln(&dataType)
fmt.Scanln(&valueStr)
// TODO: Escribe tu código a continuación
// 1. Crea la función processData que acepte interface{}
// 2. Convierte valueStr al tipo adecuado según dataType
// 3. Llama a processData con el valor convertido
}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
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientosPractica por tu cuenta: Compilador de Go online