Объединение типов в Go
Интерфейс ограничения может перечислять конкретные типы через вертикальную черту. Такое объединение говорит: параметр типа должен быть ровно одним из перечисленных имен, а не любым значением под широким ограничением.
Перечень пишут внутри интерфейса, а функцию или структуру помечают этим интерфейсом в квадратных скобках. Сами типы через черту в скобках функции напрямую не ставят: сначала дают имя ограничению.
Сложим два числа из узкого набора типов.
Печатаются 5 и 11:
package main
import "fmt"
type Number interface {
int | int64 | float64
}
func Add[T Number](a, b T) T {
return a + b
}
func main() {
fmt.Println(Add(2, 3))
fmt.Println(Add(int64(10), int64(1)))
}
Объявите ограничение с int и
float64, функцию Double,
которая удваивает значение, и выведите
результат для 2.5.
Дан следующий код:
type Signed interface {
int | int64
}
func Abs[T Signed](n T) T {
if n < 0 {
return -n
}
return n
}
Скажите, подойдет ли тип float64
для параметра T.
Даны числа:
a := 4
b := 6
Через Add из примера сложите
a и b и выведите сумму.