Пробуем дженерики Go на практике
Vložit
- čas přidán 8. 06. 2024
- Дженерики наконец появились в 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
❤️ Если у вас есть желание поддержать развитие канала:
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 в деталях)))
Да, такое обязательно будет)
Спасибо
молодчик, полезно было!
Мне кажется, что с веб камерой гораздо интереснее смотрится ролик
Все огонь)
Николай, привет.
Можешь записать видос по интерфейсам?
Было очень познавательно и полезно!
Есть такие планы, хорошая тема )
spasibo!
На самом деле в Гошке уже давно были дженерики, но были они доступны только для мапов и слайсов, наконец-то завезли в общее пользование, и мы можем написать свои обобщенные структуры данных.
Ура, шаблоны из ++ завезли))
🤫
Продолжай!
видео было интересным и полезным
Спасибо!
Спасибо за видео. С веб камерой лучше.
Привет!
Можете ли посоветовать какие-нибудь юрез-френдли материалы по функциональному программированию на Go?
Довольно годно, а ты не мог бы на чем-то реальном продемонстрировать варианты применения дженериков? Напимер, работа с базой данных или с каким-нибудь статусом пользователя 🤔
Подумаю над этим, спасибо
Вы супер крутой!
Гоферы знакомятся шаблонами :D
Кстати, кто знает в чем принципиальная разница между шаблонами и дженериками?
Спасибо большое за видео, первый раз вижу как разбирают дженерики
Пожалуйста, сделайте видео с детальным применением дженериков в разработке продукта, на пример, тудулист можно разработать без дженериков, а что нельзя?
Я считаю, что дженерики не изменят кардинально подходы к разработке. Местами станет сильно проще, это да.
Поэтому нет смысла делать отдельный ролик про их использование в конкретном продукте.
Но в будущих роликах я буду стараться их применять там, где они хорошо заходят.
@@nikolay_tuzov А на чем основанно это :Я считаю? Вопрос риторический. Любое сильное утверждение заведомо ложно. Это только потому, что дженерики в данной реализации практически полностью кастрированны и применимы только в ограниченных случаях, тк они не могут возращать другой тип.
Спасибо! Очень полезно. я могу ошибаться но 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
}
Rust-rust-rust. Only rust
Что ж за язык то такой, в котором нет настолько примитивных возможностей или структур, которые есть в каждом языке?
Тернарник, ХешСет, Min,Max...
понаворотят всякой ерунды, потом все программы в дырах 😏
Rust учи, зачем go
СУПЕРДЖЕНЕРИК:
fmt.Println(Max(int(x), int(y)))