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

preview_player
Показать описание
Дженерики наконец появились в Go - в версии 1.18, релиз которой состоялся 15 марта.
В этом видео мы "пощупаем" их на практике и напишем что-нибудь полезное.

❤️ Если у вас есть желание поддержать развитие канала:
----
Другие мои проекты:

Тайм-коды:

00:00 Вступление
00:20 Пример: почему без дженериков живётся плохо?
02:39 Решение проблемы с помощью дженериков
02:57 Синтаксис дженериков и constraint'ы
04:43 Constraint comparable
05:30 Пишем свой constraint - Ordered
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
Рекомендации по теме
Комментарии
Автор

❤️ Если у вас есть желание поддержать развитие канала:

nikolay_tuzov
Автор

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

ИванЕвтушенко-ше
Автор

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

georgiy_kulagin
Автор

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

trypophobia
Автор

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

yokai
Автор

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

damir
Автор

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

ИльинИлья-тд
Автор

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

deniss
Автор

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

zhanbolatnurutdin
Автор

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

sovac
Автор

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

Андрюхаслазерки
Автор

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

svetlana
Автор

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

ДавидВартанян-йч
Автор

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

yakwilik
Автор

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

lDENRI
Автор

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

bobomurod
Автор

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

yakwilik
Автор

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

pavelivakin
Автор

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

vladimireliseev
Автор

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
}

ukrmapper