Sobes.tech
Junior — Middle

Hogyan valósítható meg a típusösszeg (type sum) a Go nyelvben?

sobes.tech MI

Válasz az MI-től

A Go nyíltan nem támogatja a típusösszegeket (type sum), mint például néhány funkcionális nyelvben (Haskell, Scala). Azonban hasonló hatást lehet elérni interfészek és type switch segítségével.

A Go-ban az interfész egy metódusok halmazát írja le, és bármilyen típus, amely ezeket a metódusokat megvalósítja, megfelel az interfésznek. A típusösszeg megvalósításához definiálhatunk egy metódus nélküli (üres) interface{}-t vagy közös metódusokat tartalmazó interfészt, majd a futásidőben a konkrét típus meghatározásához használhatunk type switch-et.

Példa:

package main

import "fmt"

type Shape interface{} // üres interfész, bármilyen típus lehet

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
}

Így az interfész és a type switch lehetővé teszi olyan viselkedés megvalósítását, amely hasonlít a típusösszeghez, ahol a változó különböző típusú értékeket vehet fel, és a típusnak megfelelően hajtódik végre a logika.