Sobes.tech
Junior — Middle

Go dilində növ cəmi (type sum) necə həyata keçirilə bilər?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, növ cəm (type sum) üçün birbaşa dəstək yoxdur, məsələn, bəzi funksional dillərdə (Haskell, Scala). Ancaq, oxşar effekti interfeys və type switch istifadə etməklə əldə etmək mümkündür.

Go'da interfeys metodların toplusunu təsvir edir və bu metodları həyata keçirən hər hansı bir növ interfeysi təmin edir. Növ cəmini həyata keçirmək üçün, metodları olmayan (boş interfeys interface{}) və ya ümumi metodlara malik interfeys təyin edilə bilər və sonra runtime zamanı konkret növü müəyyən etmək üçün type switch istifadə edilə bilər.

Nümunə:

package main

import "fmt"

type Shape interface{} // boş interfeys, hər hansı növ ola bilər

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
}

Beləliklə, interfeys və type switch, növ cəminə bənzər davranış həyata keçirməyə imkan verir, burada dəyişən müxtəlif növ dəyərlər ala bilər və növə görə müvafiq məntiq icra olunur.