Translate

lunes, 17 de mayo de 2021

Interfaces Vacías y Conversiones en Go

En la mayoría de los lenguajes orientados a objetos hay una clase base predefinida, a menudo llamada object, que actúa como superclase de todas las clases. Esto es lo que ocurre con una interfaz vacía sin métodos: interface{} en go. Puesto que las interfaces se implementan implícitamente, todos los tipos encajan con el contrato de una interfaz vacía. 

Si quisiéramos podríamos crear una función llamada add con la siguiente firma: 

func add(a interface{}, b interface{}) interface{} { 

... 

Por lo que podriamos utilizar esta función con cualquier tipo. Pero si nosotros necesitamos hacer diferentes acciones por tipo podemos convertir los tipos. 

Para convertir una variable a un tipo específico debes usar .(TIPO): 

return a.(int) + b.(int) 

También puedes crear switchs de tipos: 

switch a.(type) { 

case int: 

fmt.Printf("a es un entero y vale %d\n", a) 

case bool, string: 

// ... 

default: 

// ... 

Sé que no es una solución elegante pero muchas veces viene bien.