Hogyan valósítható meg a típusösszeg (type sum) a Go nyelvben?
sobes.tech MI
Válasz az MI-től
A Go nyíltan nem támogatja a típusösszegeket (type sum), mint például néhány funkcionális nyelvben (Haskell, Scala). Azonban hasonló hatást lehet elérni interfészek és type switch segítségével.
A Go-ban az interfész egy metódusok halmazát írja le, és bármilyen típus, amely ezeket a metódusokat megvalósítja, megfelel az interfésznek. A típusösszeg megvalósításához definiálhatunk egy metódus nélküli (üres) interface{}-t vagy közös metódusokat tartalmazó interfészt, majd a futásidőben a konkrét típus meghatározásához használhatunk type switch-et.
Példa:
package main
import "fmt"
type Shape interface{} // üres interfész, bármilyen típus lehet
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
}
Így az interfész és a type switch lehetővé teszi olyan viselkedés megvalósítását, amely hasonlít a típusösszeghez, ahol a változó különböző típusú értékeket vehet fel, és a típusnak megfelelően hajtódik végre a logika.