1:27 А вот и не правильно... Мы ничего не будем копировать, мы просто вызов функции сделаем по-людски: fmt.Println(Max(int(x), int(y))) И всех проблем... и не нужно никакой огород городить.
Довольно годно, а ты не мог бы на чем-то реальном продемонстрировать варианты применения дженериков? Напимер, работа с базой данных или с каким-нибудь статусом пользователя 🤔
На самом деле в Гошке уже давно были дженерики, но были они доступны только для мапов и слайсов, наконец-то завезли в общее пользование, и мы можем написать свои обобщенные структуры данных.
Спасибо большое за видео, первый раз вижу как разбирают дженерики Пожалуйста, сделайте видео с детальным применением дженериков в разработке продукта, на пример, тудулист можно разработать без дженериков, а что нельзя?
Я считаю, что дженерики не изменят кардинально подходы к разработке. Местами станет сильно проще, это да. Поэтому нет смысла делать отдельный ролик про их использование в конкретном продукте. Но в будущих роликах я буду стараться их применять там, где они хорошо заходят.
@@nikolay_tuzov А на чем основанно это :Я считаю? Вопрос риторический. Любое сильное утверждение заведомо ложно. Это только потому, что дженерики в данной реализации практически полностью кастрированны и применимы только в ограниченных случаях, тк они не могут возращать другой тип.
Спасибо за урок, думаю, что для функции Reduce лучше использовать два constraint [A, T any] так как иногда init может быть коллекцией, например, чтоб не использовать filter затем map, а пройтись одним Reduce например func Reduce[A, T any](collection []T, callback func(acc A, current T) A, initValue A) A { for _, el := range collection { initValue = callback(initValue, el) } return initValue } list := []uint64{1, 2, 3, 4, 5} list = Reduce(list, func(acc []uint64, current uint64) []uint64 { if current%2 == 0 { acc = append(acc, current*2) } return acc }, make([]uint64, 0, len(list)))