Пробуем дженерики Go на практике

  Рет қаралды 14,670

Николай Тузов — Golang

Николай Тузов — Golang

Күн бұрын

Дженерики наконец появились в Go - в версии 1.18, релиз которой состоялся 15 марта.
В этом видео мы "пощупаем" их на практике и напишем что-нибудь полезное.
❤️ Если у вас есть желание поддержать развитие канала:
/ tuzov
boosty.to/nikolay.tuzov
----
Другие мои проекты:
🎙 Подкаст по Go: tuzov.link/gogetpodcast1 - в первом выпуске мы подробно обсуждаем дженерики.
👾 Мой канал в Telegram: t.me/ntuzov
🗣 Чат в Telegram: t.me/+zsSZ63wEJDs3NGVi
👀 Golang Digest: t.me/golang_digest - мои регулярные подборки интересных материалов по Go.
Мой Telegram-канал: t.me/ntuzov 👾
Golang Digest: t.me/golang_digest - регулярные подборки интересных материалов по Go.
Тайм-коды:
00:00 Вступление
00:20 Пример: почему без дженериков живётся плохо?
02:39 Решение проблемы с помощью дженериков
02:57 Синтаксис дженериков и constraint'ы
04:43 Constraint comparable
05:30 Пишем свой constraint - Ordered
06:09 Используем constraint Ordered из golang.org/x/constraints
07:22 Слайсы: функция IsContains()
09:32 Слайсы: функция Sum() и constraint Number
10:58 Слайсы: функция Reduce()
14:58 Слайсы: задание для практики - Map() и Filter()
16:15 Тернарный оператор
17:50 Реализация Max() через тернарный оператор
18:28 Заключение
#golang #generics #itubeteam #ityoutubersru

Пікірлер: 48
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
❤️ Если у вас есть желание поддержать развитие канала: www.patreon.com/tuzov boosty.to/nikolay.tuzov
@flamehowk
@flamehowk Жыл бұрын
1:27 А вот и не правильно... Мы ничего не будем копировать, мы просто вызов функции сделаем по-людски: fmt.Println(Max(int(x), int(y))) И всех проблем... и не нужно никакой огород городить.
@user-tb9in7go8u
@user-tb9in7go8u Жыл бұрын
С лицом и эмоциями живее, ближе, больше ощущения, что объясняет человек рядом👍
@georgiy_kulagin
@georgiy_kulagin 2 жыл бұрын
Спасибо за очередное отличное разжевывание материала! С вебкой добавляется больше интерактива и видео как-то живее что-ли смотрится.
@vyacheslavbogomolov7970
@vyacheslavbogomolov7970 2 жыл бұрын
Спасибо за проделанную работу!)
@invisibleinvisible83
@invisibleinvisible83 Жыл бұрын
Супер 😍 Спасибо, всех всех благ 🙏🏻❤️
@yokai6693
@yokai6693 2 жыл бұрын
Нештячек, Спасибище за оперативность!!
@user-ud2cb8ky4k
@user-ud2cb8ky4k 2 жыл бұрын
Спасибо большое, записывай ещё! Отличное лицо!
@damir8847
@damir8847 2 жыл бұрын
Все круто, спасибо! Думаю, с веб-камерой лучше, плюс личный бренд прокачивается и т.п.
@valerypyzhyk5881
@valerypyzhyk5881 Жыл бұрын
Классные ролики. Большое спасибо
@user-iy7rm7dt8x
@user-iy7rm7dt8x Жыл бұрын
Крутое видео. Люблю видосы для начинающих, и по простому.
@trypophobia7497
@trypophobia7497 Жыл бұрын
Спасибо за урок, думаю, что для функции 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)))
@smittychannel3252
@smittychannel3252 2 жыл бұрын
Ура новый видос!!...Симпатяга))
@nikolay_tuzov
@nikolay_tuzov 2 жыл бұрын
Мои проекты: - Личный Telegram-канал: t.me/golanglessons 👾 - Golang Digest: t.me/golang_digest - регулярные подборки интересных материалов по Go. - Подкаст по Go: tuzov.link/gogetpodcast1 - в первом выпуске мы подробно обсуждаем дженерики.
@deniss5034
@deniss5034 Жыл бұрын
Спасибо за материал. Хотелось бы продолжение этой темы.
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
А что именно интересно увидеть на эту тему?
@volodya-nrg
@volodya-nrg Жыл бұрын
молодчик, полезно было!
@madbad1310
@madbad1310 2 жыл бұрын
Спасибо
@AleksandrRasskazov
@AleksandrRasskazov 2 жыл бұрын
Продолжай!
@user-yh8eb8bx6m
@user-yh8eb8bx6m Жыл бұрын
Все огонь)
@user-vt4fr8pu3d
@user-vt4fr8pu3d Жыл бұрын
Спасибо!
@noob-mp7jo
@noob-mp7jo 9 ай бұрын
spasibo!
@vladimireliseev7602
@vladimireliseev7602 Жыл бұрын
Привет! Можете ли посоветовать какие-нибудь юрез-френдли материалы по функциональному программированию на Go?
@petrozavodsky
@petrozavodsky Жыл бұрын
видео было интересным и полезным
@zhanbolatnurutdin30
@zhanbolatnurutdin30 Жыл бұрын
Автору спасибо за интересный контент))) Хотел бы предложить, сделай пожалуйста видео про mutex и atomic в деталях)))
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Да, такое обязательно будет)
@lDENRI
@lDENRI 2 жыл бұрын
Спасибо за видео. С веб камерой лучше.
@s1ovac308
@s1ovac308 Жыл бұрын
Николай, привет. Можешь записать видос по интерфейсам? Было очень познавательно и полезно!
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Есть такие планы, хорошая тема )
@bobomurod
@bobomurod 2 жыл бұрын
Спасибо большое за видео, первый раз вижу как разбирают дженерики Пожалуйста, сделайте видео с детальным применением дженериков в разработке продукта, на пример, тудулист можно разработать без дженериков, а что нельзя?
@nikolay_tuzov
@nikolay_tuzov 2 жыл бұрын
Я считаю, что дженерики не изменят кардинально подходы к разработке. Местами станет сильно проще, это да. Поэтому нет смысла делать отдельный ролик про их использование в конкретном продукте. Но в будущих роликах я буду стараться их применять там, где они хорошо заходят.
@user-nu2wg3rx6n
@user-nu2wg3rx6n 2 жыл бұрын
@@nikolay_tuzov А на чем основанно это :Я считаю? Вопрос риторический. Любое сильное утверждение заведомо ложно. Это только потому, что дженерики в данной реализации практически полностью кастрированны и применимы только в ограниченных случаях, тк они не могут возращать другой тип.
@user-jd3sj6fl9q
@user-jd3sj6fl9q Жыл бұрын
Вы супер крутой!
@user-dz5pt9ht1q
@user-dz5pt9ht1q Жыл бұрын
Ура, шаблоны из ++ завезли))
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
🤫
@svetlana4427
@svetlana4427 2 жыл бұрын
Мне кажется, что с веб камерой гораздо интереснее смотрится ролик
@user-yl8tj3jm9j
@user-yl8tj3jm9j Жыл бұрын
Довольно годно, а ты не мог бы на чем-то реальном продемонстрировать варианты применения дженериков? Напимер, работа с базой данных или с каким-нибудь статусом пользователя 🤔
@nikolay_tuzov
@nikolay_tuzov Жыл бұрын
Подумаю над этим, спасибо
@pavelivakin3735
@pavelivakin3735 Жыл бұрын
Спасибо! Очень полезно. я могу ошибаться но isContains звучит не по английски.
@FBTEN2501
@FBTEN2501 9 ай бұрын
На самом деле в Гошке уже давно были дженерики, но были они доступны только для мапов и слайсов, наконец-то завезли в общее пользование, и мы можем написать свои обобщенные структуры данных.
@FBTEN2501
@FBTEN2501 9 ай бұрын
Гоферы знакомятся шаблонами :D Кстати, кто знает в чем принципиальная разница между шаблонами и дженериками?
@ukrmapper
@ukrmapper 4 ай бұрын
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 }
@stefano_schmidt
@stefano_schmidt Жыл бұрын
Что ж за язык то такой, в котором нет настолько примитивных возможностей или структур, которые есть в каждом языке? Тернарник, ХешСет, Min,Max...
@matveiq
@matveiq 2 жыл бұрын
Rust-rust-rust. Only rust
@l8l8l8l
@l8l8l8l Жыл бұрын
понаворотят всякой ерунды, потом все программы в дырах 😏
@matveiq
@matveiq 2 жыл бұрын
Rust учи, зачем go
@flamehowk
@flamehowk Жыл бұрын
СУПЕРДЖЕНЕРИК: fmt.Println(Max(int(x), int(y)))
Тест-драйв GitHub Copilot для GoLang
9:17
Николай Тузов — Golang
Рет қаралды 6 М.
Как на самом деле устроены каналы в Golang? | Golang channels internals
41:31
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 28 МЛН
Trágico final :(
01:00
Juan De Dios Pantoja
Рет қаралды 23 МЛН
Когда на улице Маябрь 😈 #марьяна #шортс
00:17
Как на самом деле устроен тип Map в Golang? | Golang под капотом
34:33
GoLang Slice в деталях, простым языком
32:09
Николай Тузов — Golang
Рет қаралды 70 М.
SQLite в Golang - как использовать, на примере Telegram-бота
27:22
Николай Тузов — Golang
Рет қаралды 11 М.
Всё про конкурентность в Go
23:36
defer panic
Рет қаралды 12 М.
Что нужно знать о слайсах в Go?
28:34
Эйч Навыки — менторская программа
Рет қаралды 13 М.
Дженерики в Java. Проще чем кажется.
21:36
Игорь Мешалкин
Рет қаралды 12 М.
Stupid man 👨😂
00:20
Nadir Show
Рет қаралды 28 МЛН