Sobes.tech
Junior — Middle

Ինչպե՞ս կարելի է իրականացնել տեսակների գումարը (type sum) Go լեզվում։

sobes.tech AI

Պատասխան AI-ից

Go-ում ուղղակի աջակցություն չկա տիպերի գումարի (type sum), ինչպես որոշ ֆունկցիոնալ լեզուներում (Haskell, Scala): Սակայն, նման ազդեցություն կարելի է հասնել ինտերֆեյսների և type switch-ների միջոցով:

Go-ում ինտերֆեյսը նկարագրում է մեթոդների հավաքածու, և ցանկացած տիպ, որը իրականացնում է այդ մեթոդները, համապատասխանում է ինտերֆեյսին: Տիպերի գումարները իրականացնելիս, կարելի է սահմանել մեթոդներ չունեցող (ակնթարթային) interface{} ինտերֆեյս կամ ընդհանուր մեթոդներ պարունակող, և ապա օգտագործել type switch՝ որոշելու համար կոնկրետ տիպը գործարկման ժամանակ:

Օրինակ՝

package main

import "fmt"

type Shape interface{} // ակնթարթային ինտերֆեյս, կարող է լինել ցանկացած տիպ

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
}

Այսպիսով, ինտերֆեյսը և type switch-ը թույլ են տալիս իրականացնել այնպիսի վարքագիծ, որը նման է տիպերի գումարին, որտեղ փոփոխականը կարող է ընդունել տարբեր տիպերի արժեքներ, և ըստ տիպի, կատարվում է համապատասխան տրամաբանությունը։