¿Cómo se puede implementar la suma de variantes de tipos (type sum) en el lenguaje Go?
sobes.tech AI
Respuesta de la IA
En Go no hay soporte directo para tipos sum (type sum), como en algunos lenguajes funcionales (Haskell, Scala). Sin embargo, se puede lograr un efecto similar usando interfaces y type switch.
Una interfaz en Go describe un conjunto de métodos, y cualquier tipo que implemente estos métodos satisface la interfaz. Para implementar tipos sum, se puede definir una interfaz sin métodos (interfaz vacía interface{}) o con métodos comunes, y luego usar un type switch para determinar el tipo en tiempo de ejecución.
Ejemplo:
package main
import "fmt"
type Shape interface{} // interfaz vacía, puede ser cualquier tipo
func area(s Shape) float64 {
switch v := s.(type) {
case Circle:
return 3.14 * v.Radius * v.Radius
case Rectangle:
return v.Width * v.Height
default:
return 0
}
}
type Circle struct {
Radius float64
}
type Rectangle struct {
Width, Height float64
}
func main() {
c := Circle{Radius: 5}
r := Rectangle{Width: 3, Height: 4}
fmt.Println(area(c)) // 78.5
fmt.Println(area(r)) // 12
}
De esta manera, la interfaz y el type switch permiten implementar un comportamiento similar a la suma de tipos, donde la variable puede tomar valores de diferentes tipos, y en función del tipo se ejecuta la lógica correspondiente.