Sobes.tech
Junior — Middle

Wie kann man die Summe von Varianten (Type Sum) in der Programmiersprache Go implementieren?

sobes.tech KI

Antwort von AI

In Go gibt es keine direkte Unterstützung für Summe-Typen (type sum), wie in einigen funktionalen Sprachen (Haskell, Scala). Ein ähnlicher Effekt kann jedoch mit Interfaces und type switch erreicht werden.

Ein Interface in Go beschreibt eine Menge von Methoden, und jeder Typ, der diese Methoden implementiert, erfüllt die Schnittstelle. Um Summe-Typen zu implementieren, kann man ein Interface ohne Methoden (leeres Interface interface{}) oder mit gemeinsamen Methoden definieren und dann einen type switch verwenden, um den konkreten Typ zur Laufzeit zu bestimmen.

Beispiel:

package main

import "fmt"

type Shape interface{} // leeres Interface, kann jeder Typ sein

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
}

Auf diese Weise ermöglichen Interface und type switch die Implementierung eines Verhaltens, das einer Summe von Typen ähnelt, bei dem eine Variable Werte verschiedener Typen annehmen kann und je nach Typ die entsprechende Logik ausgeführt wird.