Sobes.tech
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.