Sobes.tech
Junior — Middle

Hoe implementeer je de som van type-varianten (type sum) in de Go-taal?

sobes.tech AI

Antwoord van AI

In Go is er geen directe ondersteuning voor somtypes (type sum), zoals in sommige functionele talen (Haskell, Scala). Echter, een vergelijkbaar effect kan worden bereikt met behulp van interfaces en type switch.

Een interface in Go beschrijft een set methoden, en elk type dat deze methoden implementeert, voldoet aan de interface. Om somtypes te implementeren, kan je een interface zonder methoden (lege interface interface{}) of met gemeenschappelijke methoden definiëren, en vervolgens een type switch gebruiken om het specifieke type tijdens runtime te bepalen.

Voorbeeld:

package main

import "fmt"

type Shape interface{} // lege interface, kan elk type zijn

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
}

Op deze manier maken interface en type switch het mogelijk om gedrag te implementeren dat lijkt op een som van types, waarbij de variabele waarden van verschillende types kan aannemen en afhankelijk van het type de juiste logica wordt uitgevoerd.