Sobes.tech
Junior — Middle

¿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.