Долгое время Go-разработчики обходились без дженериков. Для универсальных алгоритмов приходилось использовать
interface{}
и приводить типы вручную, теряя типобезопасность и читаемость. С выходом дженериков Go наконец-то получил нативный способ писать универсальный, но строгий по типам код.
Дженерики позволяют описывать один алгоритм для разных типов, сохраняя преимущества статической типизации. Это делает код выразительнее, безопаснее и избавляет от дублирования.
Пример 1. Универсальное сравнение разных типов
func Compare[T ~int | ~int64 | ~float64 | ~string](a, b T) int {
if a < b {
return -1
} else if a > b {
return 1
}
return 0
}
Теперь можно сравнивать любые значения базовых типов — без кучи копий кода и без interface{}.
Пример 2. Типобезопасная коллекция Set
type Set[T comparable] map[T]struct{}
func NewSet[T comparable]() Set[T] { return make(Set[T]) }
func (s Set[T]) Add(v T) { s[v] = struct{}{} }
func (s Set[T]) Has(v T) bool { _, ok := s[v]; return ok }
func (s Set[T]) Delete(v T) { delete(s, v) }
func main() {
users := NewSet[string]()
users.Add("alice")
users.Add("bob")
nums := NewSet[int]()
nums.Add(1)
nums.Add(2)
fmt.Println(users.Has("bob")) // true
fmt.Println(nums.Has(3)) // false
}
Один тип Set теперь подходит и для string, и для int — без потери типобезопасности.
Практические советы
- Если функция используется только в одном месте, дженерик может быть избыточен.
- Дженерики - это про безопасность типов и читаемость, а не про автоматическое ускорение.
Применяйте их, когда реально хотите избавиться от дублирования и сохранить строгую типизацию.
Дженерики это не просто синтаксический сахар, а инструмент, который делает Go ближе к языкам уровня production-инженерии, где читаемость и надёжность важнее микрооптимизаций.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤5🔥4
📘 На Stepik вышел курс — «Golang для продвинутых»
Уже знакомы с Go и хотите перейти на следующий уровень? Этот курс — именно то, что нужно, чтобы прокачать свои навыки.
🔍 Что вы получите:
Глубокое понимание ключевых тем: goroutines, channels, context, garbage collector, genericsРешение реальных инженерных задач: конкурентность, сетевое программирование, работа с базами данныхБолее 200 интерактивных заданий с автопроверкой — всё в браузере, без установки, в удобное для вас время
🎓 Сертификат по завершении — добавьте его в резюме или профиль LinkedIn
🚀 Прокачайте Go с пользой и удовольствием. Начните уже сегодня и получите скидку 25%, которая действительна в течение 48 часов
👉 Пройти курс на Stepik
Уже знакомы с Go и хотите перейти на следующий уровень? Этот курс — именно то, что нужно, чтобы прокачать свои навыки.
🔍 Что вы получите:
Глубокое понимание ключевых тем: goroutines, channels, context, garbage collector, genericsРешение реальных инженерных задач: конкурентность, сетевое программирование, работа с базами данныхБолее 200 интерактивных заданий с автопроверкой — всё в браузере, без установки, в удобное для вас время
🎓 Сертификат по завершении — добавьте его в резюме или профиль LinkedIn
🚀 Прокачайте Go с пользой и удовольствием. Начните уже сегодня и получите скидку 25%, которая действительна в течение 48 часов
👉 Пройти курс на Stepik
❤2
SQL-инъекции остаются одной из самых частых и опасных уязвимостей в веб-приложениях. Ошибка в одном запросе — и злоумышленник получает доступ к базе данных, паролям и пользовательским данным.
В этом материале — полный практический разбор:
как именно происходят SQL-инъекции, какие ошибки разработчиков к ним приводят, как их распознать в коде и главное — как защититься.
Разберём реальные примеры на Python, PHP и Go, посмотрим, как атакующий «взламывает» запрос, и научимся писать безопасный код с параметризованными запросами и ORM.
Это не теория, а руководство, которое поможет понять уязвимость изнутри и навсегда закрыть её в своих проектах.
👉 Читать гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥3🥰2