Обсуждаем проблемные места Go с Арсением Тереховым — разработчиком из команды GoLand в JetBrains. Арсений смотрит на Go с необычного угла: он из мира Kotlin, но при этом погружён в Go глубже многих гоферов благодаря работе над GoLand.
Что обсуждаем:
— Nil safety в Go: почему это проблема и как с ней жить
— Слайсы: append выглядит иммутабельно, но мутирует данные
— Замыкания и горутины: классические баги с захватом переменных
— Shadowing переменных: визуально не отличить, но приводит к багам
— Data races при чтении слайсов
Выпуск вышел при поддержке AvitoTech 💙
Статья про обработку ошибок в Go: https://clc.to/U7_U_w
Telegram AvitoTech: https://clc.to/-HtbVg
Митапы: https://clc.to/vbUbyg
Состав:
Николай Тузов
Арсений Терехов — JetBrains, GoLand Team
Глеб Яльчик
Дмтрий Матрёничев
👾 Мой Телеграм-Канал с анонсами, гайдами и др.: https://t.me/ntuzov
Тайминги:
- Вступление
- Предыстория: вопросы от Арсения
- Хорошая новость: новые выпуски теперь будут выходить регулярно
- Gophercon West — как это было: 25 часов перелёта и визовый лайфхак
- Футболки с конференций и брендинг
- Тема #1: Nil safety — старт обсуждения
- История: Тони Хоар, Algol и billion dollar mistake
- Реальные кейсы: $100k loss и падение Google Cloud
- Взгляд на проблему с экономической точки зрения
- Nil как валидное значение указателя
- История указателей: от ассемблера до высокоуровневых языков
- Создатели Go: Rob Pike, Russ Cox, Ken Thompson
- Дизайн языка — в чём идея?
- Go пофиксил проблемы C/C++?
- Философия Go: проверенные решения, а не новации
- Семантика указателей в Go: nil-receiver как валидное состояние
- Возможен nil safety с учётом рефлексии?
- Привет бабушке!
- Безопасен ли Go без unsafe/reflect?
- Kotlin vs Java: где действительно есть null safety
- Ограничения null safety: Spring, рефлексия, interop
- Safe enough vs абсолютная безопасность
- Итоги по nil pointer
- Тема #2: Захват переменных — классический баг с циклами
- Обратная совместимость: почему сложно что-то менять
- Революция в тулинге языков программирования
- Final в Java/Kotlin и почему этого нет в Go
- Захват переменных в C++: явный синтаксис
- Когда нужна запись в захваченные переменные
- Каналы в Go: гарантии и практические сложности
- Роль линтеров — go vet, staticcheck, golangci-lint
- Тулинг: data-flow анализ, детектор гонок
- Почему линтеры простые: философия дизайна
- Тема #3: Слайсы — самая болезненная тема
- Загадка про 8 слайсов и capacity
- Проблемы дизайна слайсов в Go и почему так
- Как работает append и реаллокация
- Почему append возвращает значение?
- Эволюция через тулинг: x/tools/modernize и автопочинка
- Data races при конкурентном append
- Тема #4: Shadowing переменных
- Удобство vs однозначность кода
- Философия дизайна языков и их эволюция
- Выводы
- Каждый новый язык лучше?
- Относительность решений в программировании
- Теорема Гёделя о неполноте
- Аналогия с Nintendo: простота как фича
- Аналогия с физикой: разные модели для разных масштабов
- Заключение
Smart linkhttps://pc.st/e/3JvNEpwzs-l
Official sitehttps://gogetpodcast.mave.digital
Auto-openhttps://pc.st/e/3JvNEpwzs-l?a
Add podcast to the siteEmbed Podcast



