Задачи на generics в Go. Часть 3
Сделайте функцию ParseJSON[T any](data []byte) (T, error) через json.Unmarshal.
Сделайте функцию GroupBy[T any, K comparable](items []T, key func(T) K) map[K][]T.
Сделайте интерфейс Producer[T any] с методом Produce() T.
Сделайте интерфейс Consumer[T any] с методом Consume(T).
Объясните, почему в Go нет covariance/contravariance как в Java/Kotlin.
Сделайте generic-структуру TreeNode[T any] с полями Value T и Children []*TreeNode[T].
Сделайте type StringMap[V any] map[string]V для упрощения сигнатур.
Сделайте generic-структуру Cache[K comparable, V any].
Сделайте функцию SecondOrDefault[T any](s []T, def T) T.
Комплексная generic-задача на срез и map.