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.