podcast

Ep. 18: Тёмные стороны Go — с разработчиком GoLand | GoGetPodcast №18

09.11.2025
Listen to the episode on your favorite platforms:
  • Apple Podcasts
  • Yandex Music
  • Youtube
  • Spotify
  • Castbox
  • Pocket Casts
  • ВКонтакте
  • Overcast
  • Castro
  • RadioPublic
Обсуждаем проблемные места 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: простота как фича
  • Аналогия с физикой: разные модели для разных масштабов
  • Заключение