Изучаем Golang. Урок №26. Дженерики(Generics)

preview_player
Показать описание
В данном видео мы продолжаем изучать язык Go (Golang). Мы узнаем, что такое дженерики и где они применяются. Разберем, что такое type parameters и constraint. Изучим интерфейсы comparable и any. Узнаем как использовать union и приближние типов.

0:00 Содержание
Рекомендации по теме
Комментарии
Автор

Отличный урок, информация подана с примерами, все понятно, нет лишней воды. 10 из 10. Отдельно хочется отметить приятный голос и адекватное качество звука (многие другие каналы подобным не отличаются, в связи с чем слушать и воспринимать информацию куда тяжелее)

ДмитрийХорьков-ея
Автор

Уроки полезные, всё кратко, но ёмко. Одно замечание - сделай, пожалуйста, шрифт крупнее, и/или тему более контрастную. Тяжело читать код

sdz
Автор

Молодец, хорошо разжовываешь.
Давай следующий урок по тестированию

ldev
Автор

Однозначно лайк, больше обучающих видео по Golang плиз)

last
Автор

Спасибо за ролик! Это мой второй подход к дженерикам и на этот раз вышел не с кашей в голове 😊

Только вот не понял момент с обобщённым типом в функции unionInterfaceAndType() 17:00 . В чем фишка его использовать, если в функции мы все равно явно должны указать какого конкретного типа мы передаём обобщенный тип, ведь при этом придется писать функцию несколько раз для каждого конкретного типа. Или подразумевается, что пишешь в этой функции switch с type assertion и задаешь поведение для каждого конкретного типа? Тогда опять не понятна эта фишка, ведь по идее делаешь всё как раньше .

petrustyuzhanin
Автор

Блин, не знаю. Прекрасно всегда обходился без них. Вроде как выглядит полезной фича. Но всегда задачи на go у меня писались под конкретный тип данных.

igormel
Автор

Спасибо за урок, выглядят они не привычно ну по сравнению как они выглядят в других языках Rust, C#, Java)
будто урезанные дженерики в Golang ))))
вот играюсь с дженериками подскажите пожалуйста есть ли вариант написать функцию Map сразу для слайса и хэш мапы лучше чем это УГ:

package main

import (
"fmt"
)

type Collection[T any, K comparable] interface {
~[]T | ~map[K]T
}

func Map[C Collection[T, K], T any, K comparable](collection C, callback func(item T) T) ([]T, map[K]T) {
switch t := any(collection).(type) {
case []T:
slice := make([]T, 0, len(collection))
for _, el := range t {
slice = append(slice, callback(el))
}
return slice, nil
case map[K]T:
hashMap := make(map[K]T, len(collection))
for key, el := range t {
hashMap[key] = callback(el)
}
return nil, hashMap
default:
return nil, nil
}
}

func main() {

list := []uint64{1, 2, 3, 4, 5}
person := make(map[string]string)
person["leha"] = "blevushkin"
person["dima"] = "kekin"
person["alex"] = "ssikin"

slice, _ := Map[[]uint64, uint64, string](list, func(item uint64) uint64 {
return item + 1
})
fmt.Printf("%T %v\n", slice, slice)

_, hashMap := Map[map[string]string, string, string](person, func(item string) string {
return item + "!"
})
fmt.Printf("%T %v\n", hashMap, hashMap)

}

trypophobia
Автор

В дженериках только одно хорошо, это то что они не нужны, когда нужен быстрый код

MaximRovinsky
Автор

Благодарю за видео.
Но как по мне, от них только вред, теперь будут лепить кто во что горазд)

ruauka
Автор

non-comparable также функции, интерфейсы

timurkash