Generic types

import (
    "fmt"
)

type number interface {
    int8 | float32
}

type size[T numberstruct {
    width, height T
}

func (s size[T]) AsText() string {
    return fmt.Sprintf("[%v; %v]",
    s.width, s.height)
}

var sizeInt = size[int8]{58}
var textInt = sizeInt.AsText()
//textInt is "[5; 8]"

var sizeFloat = size[float32]{3.71.58}
var textFloat = sizeFloat.AsText()
//textFloat is "[3.7; 1.58]"

fmt.Println("textInt is", textInt)
fmt.Println("textFloat is", textFloat)