1:27 А вот и не правильно... Мы ничего не будем копировать, мы просто вызов функции сделаем по-людски: fmt.Println(Max(int(x), int(y))) И всех проблем... и не нужно никакой огород городить.
Спасибо за урок, думаю, что для функции 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)))
5:03 почему вывелись х и у, если в теле функции условие x == y не прошло? Должно было вывестись только y. Похоже на то, что код все-таки не скомпилировался и мы получили вывод последней удачной компиляции. Или я что-то не понял? 6:06 то же самое.
На самом деле в Гошке уже давно были дженерики, но были они доступны только для мапов и слайсов, наконец-то завезли в общее пользование, и мы можем написать свои обобщенные структуры данных.
Довольно годно, а ты не мог бы на чем-то реальном продемонстрировать варианты применения дженериков? Напимер, работа с базой данных или с каким-нибудь статусом пользователя 🤔
Спасибо большое за видео, первый раз вижу как разбирают дженерики Пожалуйста, сделайте видео с детальным применением дженериков в разработке продукта, на пример, тудулист можно разработать без дженериков, а что нельзя?
Я считаю, что дженерики не изменят кардинально подходы к разработке. Местами станет сильно проще, это да. Поэтому нет смысла делать отдельный ролик про их использование в конкретном продукте. Но в будущих роликах я буду стараться их применять там, где они хорошо заходят.
@@nikolay_tuzov А на чем основанно это :Я считаю? Вопрос риторический. Любое сильное утверждение заведомо ложно. Это только потому, что дженерики в данной реализации практически полностью кастрированны и применимы только в ограниченных случаях, тк они не могут возращать другой тип.
❤️ Если у вас есть желание поддержать развитие канала:
www.patreon.com/tuzov
boosty.to/nikolay.tuzov
1:27 А вот и не правильно...
Мы ничего не будем копировать, мы просто вызов функции сделаем по-людски:
fmt.Println(Max(int(x), int(y)))
И всех проблем... и не нужно никакой огород городить.
Спасибо за очередное отличное разжевывание материала! С вебкой добавляется больше интерактива и видео как-то живее что-ли смотрится.
С лицом и эмоциями живее, ближе, больше ощущения, что объясняет человек рядом👍
очень понятно объясняешь
Спасибо за проделанную работу!)
Спасибо за урок, думаю, что для функции 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)))
Супер 😍 Спасибо, всех всех благ 🙏🏻❤️
Нештячек, Спасибище за оперативность!!
Спасибо большое, записывай ещё! Отличное лицо!
Спасибо за материал. Хотелось бы продолжение этой темы.
А что именно интересно увидеть на эту тему?
Мои проекты:
- Личный Telegram-канал: t.me/golanglessons 👾
- Golang Digest: t.me/golang_digest - регулярные подборки интересных материалов по Go.
- Подкаст по Go: tuzov.link/gogetpodcast1 - в первом выпуске мы подробно обсуждаем дженерики.
Все круто, спасибо! Думаю, с веб-камерой лучше, плюс личный бренд прокачивается и т.п.
Ура новый видос!!...Симпатяга))
Крутое видео. Люблю видосы для начинающих, и по простому.
Классные ролики. Большое спасибо
Автору спасибо за интересный контент))) Хотел бы предложить, сделай пожалуйста видео про mutex и atomic в деталях)))
Да, такое обязательно будет)
Спасибо
Все огонь)
молодчик, полезно было!
5:03 почему вывелись х и у, если в теле функции условие x == y не прошло? Должно было вывестись только y. Похоже на то, что код все-таки не скомпилировался и мы получили вывод последней удачной компиляции. Или я что-то не понял?
6:06 то же самое.
Продолжай!
Спасибо!
Николай, привет.
Можешь записать видос по интерфейсам?
Было очень познавательно и полезно!
Есть такие планы, хорошая тема )
видео было интересным и полезным
На самом деле в Гошке уже давно были дженерики, но были они доступны только для мапов и слайсов, наконец-то завезли в общее пользование, и мы можем написать свои обобщенные структуры данных.
spasibo!
Спасибо за видео. С веб камерой лучше.
Ура, шаблоны из ++ завезли))
🤫
Мне кажется, что с веб камерой гораздо интереснее смотрится ролик
Довольно годно, а ты не мог бы на чем-то реальном продемонстрировать варианты применения дженериков? Напимер, работа с базой данных или с каким-нибудь статусом пользователя 🤔
Подумаю над этим, спасибо
Спасибо большое за видео, первый раз вижу как разбирают дженерики
Пожалуйста, сделайте видео с детальным применением дженериков в разработке продукта, на пример, тудулист можно разработать без дженериков, а что нельзя?
Я считаю, что дженерики не изменят кардинально подходы к разработке. Местами станет сильно проще, это да.
Поэтому нет смысла делать отдельный ролик про их использование в конкретном продукте.
Но в будущих роликах я буду стараться их применять там, где они хорошо заходят.
@@nikolay_tuzov А на чем основанно это :Я считаю? Вопрос риторический. Любое сильное утверждение заведомо ложно. Это только потому, что дженерики в данной реализации практически полностью кастрированны и применимы только в ограниченных случаях, тк они не могут возращать другой тип.
Вы супер крутой!
Привет!
Можете ли посоветовать какие-нибудь юрез-френдли материалы по функциональному программированию на Go?
Гоферы знакомятся шаблонами :D
Кстати, кто знает в чем принципиальная разница между шаблонами и дженериками?
Спасибо! Очень полезно. я могу ошибаться но isContains звучит не по английски.
Павел Деревянко здорового человека
а дженерик классы ?
package main
import "fmt"
func main() {
arr := []int{1, 2, 4, 8, 16, 32}
res := Map(func(x int) int {
return x * 2
}, arr)
fmt.Println(res) // [2 4 8 16 32 64]
res = Filter(func(x int) bool {
return x > 5
}, arr)
fmt.Println(res) // [8 16 32]
}
func Map[T any](lambda func(elements T) T, elements []T) (res []T) {
for _, elem := range elements {
res = append(res, lambda(elem))
}
return
}
func Filter[T any](lambda func(elements T) bool, elements []T) (res []T) {
for _, elem := range elements {
if lambda(elem) {
res = append(res, elem)
}
}
return
}
понаворотят всякой ерунды, потом все программы в дырах 😏
Что ж за язык то такой, в котором нет настолько примитивных возможностей или структур, которые есть в каждом языке?
Тернарник, ХешСет, Min,Max...
Rust-rust-rust. Only rust
Rust учи, зачем go
СУПЕРДЖЕНЕРИК:
fmt.Println(Max(int(x), int(y)))