Junior — Middle
Kaip įgyvendinti tipų sumą (type sum) Go kalboje?
sobes.tech AI
Atsakymas iš AI
Go kalboje nėra tiesioginės paramos tipų sumai (type sum), kaip kai kuriose funkcionaliose kalbose (Haskell, Scala). Tačiau panašų efektą galima pasiekti naudojant interfeisus ir type switch.
Interfeisas Go apibūdina metodų rinkinį, ir bet kuris tipas, įgyvendinantis šiuos metodus, atitinka interfeisą. Norint įgyvendinti tipų sumą, galima apibrėžti metodų neturinį (tuščią) interface{} arba su bendrais metodais interfeisą, ir tada naudoti type switch, kad nustatytumėte konkretų tipą vykdymo metu.
Pavyzdys:
package main
import "fmt"
type Shape interface{} // tuščias interfeisas, gali būti bet koks tipas
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
}
Šiuo būdu, interfeisas ir type switch leidžia įgyvendinti elgseną, panašią į tipų sumą, kur kintamasis gali priimti skirtingų tipų reikšmes, ir priklausomai nuo tipo, vykdoma atitinkama logika.