Средства обобщённого программирования?

Middle+
513 просмотров
AFK Offer AI

С Go 1.18 появились дженерики (generics). До этого использовали interface{}, кодогенерацию и copy-paste.

Основные конструкции:

func Map[T any, R any](s []T, f func(T) R) []R {
    result := make([]R, len(s))
    for i, v := range s {
        result[i] = f(v)
    }
    return result
}

Можно задавать constraints через интерфейсы:

type Number interface {
    int | float64 | int64
}
func Sum[T Number](nums []T) T { ... }

Пакет constraints и slices/maps из стандартной библиотеки уже используют дженерики. Ограничение: нельзя параметризовать методы, только функции и типы.

Следующий вопрос

Что такое data consistency?