Junior — Middle
Kā īstenot tipu summu (type sum) Go valodā?
sobes.tech AI
Atbilde no AI
Go valodā nav tiešas atbalsts tipu summām (type sum), kā tas ir dažās funkcionālajās valodās (Haskell, Scala). Tomēr līdzīgu efektu var sasniegt, izmantojot interfeisus un type switch.
Interfeiss Go valodā apraksta metožu kopumu, un jebkurš tips, kas īsteno šīs metodes, atbilst interfeisam. Lai īstenotu tipu summas, var definēt metožu neesošu (tukšu) interface{} interfeisu vai ar kopīgām metodēm, un tad izmantot type switch, lai noteiktu konkrētu tipu izpildes laikā.
Piemērs:
package main
import "fmt"
type Shape interface{} // tukšs interfeiss, var būt jebkurš tips
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
}
Šādā veidā interfeiss un type switch ļauj īstenot uzvedību, kas līdzinās tipu summai, kur mainīgais var pieņemt dažādu tipu vērtības, un atkarībā no tipa tiek izpildīta atbilstoša loģika.