Cum se poate implementa suma variantelor de tipuri (type sum) în limbajul Go?
sobes.tech AI
Răspuns de la AI
În Go, nu există suport direct pentru tipuri sum (type sum), ca în unele limbaje funcționale (Haskell, Scala). Cu toate acestea, se poate obține un efect similar folosind interfețe și switch de tip.
O interfață în Go descrie un set de metode, iar orice tip care implementează aceste metode satisface interfața. Pentru a implementa tipuri sum, se poate defini o interfață fără metode (interfață goală interface{}) sau cu metode comune, apoi se folosește un switch de tip pentru a determina tipul specific în timpul execuției.
Exemplu:
package main
import "fmt"
type Shape interface{} // interfață goală, poate fi orice tip
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
}
Astfel, interfața și switch-ul de tip permit implementarea unui comportament similar cu suma de tipuri, unde variabila poate primi valori de diferite tipuri, iar în funcție de tip, se execută logica corespunzătoare.