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

Sdílet
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

Komentáře • 48

  • @nikolay_tuzov
    @nikolay_tuzov  Před 2 lety +3

    ❤️ Если у вас есть желание поддержать развитие канала:
    www.patreon.com/tuzov
    boosty.to/nikolay.tuzov

    • @flamehowk
      @flamehowk Před rokem

      1:27 А вот и не правильно...
      Мы ничего не будем копировать, мы просто вызов функции сделаем по-людски:
      fmt.Println(Max(int(x), int(y)))
      И всех проблем... и не нужно никакой огород городить.

  • @user-tb9in7go8u
    @user-tb9in7go8u Před rokem +13

    С лицом и эмоциями живее, ближе, больше ощущения, что объясняет человек рядом👍

  • @georgiy_kulagin
    @georgiy_kulagin Před 2 lety +23

    Спасибо за очередное отличное разжевывание материала! С вебкой добавляется больше интерактива и видео как-то живее что-ли смотрится.

  • @yokai6693
    @yokai6693 Před 2 lety +5

    Нештячек, Спасибище за оперативность!!

  • @trypophobia7497
    @trypophobia7497 Před 2 lety +4

    Спасибо за урок, думаю, что для функции 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)))

  • @vyacheslavbogomolov7970
    @vyacheslavbogomolov7970 Před 2 lety +9

    Спасибо за проделанную работу!)

  • @user-ud2cb8ky4k
    @user-ud2cb8ky4k Před 2 lety +4

    Спасибо большое, записывай ещё! Отличное лицо!

  • @damir8847
    @damir8847 Před 2 lety +5

    Все круто, спасибо! Думаю, с веб-камерой лучше, плюс личный бренд прокачивается и т.п.

  • @invisibleinvisible83
    @invisibleinvisible83 Před rokem +2

    Супер 😍 Спасибо, всех всех благ 🙏🏻❤️

  • @nikolay_tuzov
    @nikolay_tuzov  Před 2 lety +6

    Мои проекты:
    - Личный Telegram-канал: t.me/golanglessons 👾
    - Golang Digest: t.me/golang_digest - регулярные подборки интересных материалов по Go.
    - Подкаст по Go: tuzov.link/gogetpodcast1 - в первом выпуске мы подробно обсуждаем дженерики.

  • @deniss5034
    @deniss5034 Před rokem +2

    Спасибо за материал. Хотелось бы продолжение этой темы.

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

      А что именно интересно увидеть на эту тему?

  • @smittychannel3252
    @smittychannel3252 Před 2 lety +4

    Ура новый видос!!...Симпатяга))

  • @valerypyzhyk5881
    @valerypyzhyk5881 Před rokem

    Классные ролики. Большое спасибо

  • @user-iy7rm7dt8x
    @user-iy7rm7dt8x Před rokem +1

    Крутое видео. Люблю видосы для начинающих, и по простому.

  • @zhanbolatnurutdin30
    @zhanbolatnurutdin30 Před rokem +4

    Автору спасибо за интересный контент))) Хотел бы предложить, сделай пожалуйста видео про mutex и atomic в деталях)))

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

      Да, такое обязательно будет)

  • @madbad1310
    @madbad1310 Před 2 lety +3

    Спасибо

  • @volodya-nrg
    @volodya-nrg Před rokem

    молодчик, полезно было!

  • @svetlana4427
    @svetlana4427 Před 2 lety +1

    Мне кажется, что с веб камерой гораздо интереснее смотрится ролик

  • @user-yh8eb8bx6m
    @user-yh8eb8bx6m Před rokem

    Все огонь)

  • @s1ovac308
    @s1ovac308 Před rokem +3

    Николай, привет.
    Можешь записать видос по интерфейсам?
    Было очень познавательно и полезно!

    • @nikolay_tuzov
      @nikolay_tuzov  Před rokem

      Есть такие планы, хорошая тема )

  • @noob-mp7jo
    @noob-mp7jo Před 10 měsíci

    spasibo!

  • @FBTEN2501
    @FBTEN2501 Před 10 měsíci

    На самом деле в Гошке уже давно были дженерики, но были они доступны только для мапов и слайсов, наконец-то завезли в общее пользование, и мы можем написать свои обобщенные структуры данных.

  • @user-dz5pt9ht1q
    @user-dz5pt9ht1q Před rokem +2

    Ура, шаблоны из ++ завезли))

  • @AleksandrRasskazov
    @AleksandrRasskazov Před 2 lety +2

    Продолжай!

  • @petrozavodsky
    @petrozavodsky Před rokem

    видео было интересным и полезным

  • @user-vt4fr8pu3d
    @user-vt4fr8pu3d Před rokem

    Спасибо!

  • @lDENRI
    @lDENRI Před 2 lety +1

    Спасибо за видео. С веб камерой лучше.

  • @vladimireliseev7602
    @vladimireliseev7602 Před rokem

    Привет!
    Можете ли посоветовать какие-нибудь юрез-френдли материалы по функциональному программированию на Go?

  • @user-yl8tj3jm9j
    @user-yl8tj3jm9j Před 2 lety +2

    Довольно годно, а ты не мог бы на чем-то реальном продемонстрировать варианты применения дженериков? Напимер, работа с базой данных или с каким-нибудь статусом пользователя 🤔

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety

      Подумаю над этим, спасибо

  • @user-jd3sj6fl9q
    @user-jd3sj6fl9q Před rokem

    Вы супер крутой!

  • @FBTEN2501
    @FBTEN2501 Před 10 měsíci

    Гоферы знакомятся шаблонами :D
    Кстати, кто знает в чем принципиальная разница между шаблонами и дженериками?

  • @bobomurod
    @bobomurod Před 2 lety +3

    Спасибо большое за видео, первый раз вижу как разбирают дженерики
    Пожалуйста, сделайте видео с детальным применением дженериков в разработке продукта, на пример, тудулист можно разработать без дженериков, а что нельзя?

    • @nikolay_tuzov
      @nikolay_tuzov  Před 2 lety +4

      Я считаю, что дженерики не изменят кардинально подходы к разработке. Местами станет сильно проще, это да.
      Поэтому нет смысла делать отдельный ролик про их использование в конкретном продукте.
      Но в будущих роликах я буду стараться их применять там, где они хорошо заходят.

    • @user-nu2wg3rx6n
      @user-nu2wg3rx6n Před 2 lety

      @@nikolay_tuzov А на чем основанно это :Я считаю? Вопрос риторический. Любое сильное утверждение заведомо ложно. Это только потому, что дженерики в данной реализации практически полностью кастрированны и применимы только в ограниченных случаях, тк они не могут возращать другой тип.

  • @pavelivakin3735
    @pavelivakin3735 Před rokem +1

    Спасибо! Очень полезно. я могу ошибаться но isContains звучит не по английски.

  • @ukrmapper
    @ukrmapper Před 4 měsíci

    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
    }

  • @matveiq
    @matveiq Před 2 lety

    Rust-rust-rust. Only rust

  • @stefano_schmidt
    @stefano_schmidt Před rokem

    Что ж за язык то такой, в котором нет настолько примитивных возможностей или структур, которые есть в каждом языке?
    Тернарник, ХешСет, Min,Max...

  • @l8l8l8l
    @l8l8l8l Před rokem

    понаворотят всякой ерунды, потом все программы в дырах 😏

  • @matveiq
    @matveiq Před 2 lety

    Rust учи, зачем go

  • @flamehowk
    @flamehowk Před rokem

    СУПЕРДЖЕНЕРИК:
    fmt.Println(Max(int(x), int(y)))