Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top

Вебинар: Безопасная разработка и сертификация: практика, инструменты, перспективы - 03.12

>
>
>
>
Go vet не поможет... Как сделать...

Go vet не поможет... Как сделать свой анализатор кода для Go?

28 Сен 2026

Статический анализатор — это полезный инструмент, и Go разработчики знают это не понаслышке благодаря go vet. Но что, если его возможностей не хватает? Искать новый инструмент? Или сделать… свой?!

В докладе разобрали встроенные в Go инструменты и возможности для разбора кода. Узнали, что лежит под капотом статического анализа, что такое семантическая модель, и построили синтаксическое дерево.

А нужно это всё для того, чтобы в итоге написать собственный анализатор, который будет искать ошибки под ваш конкретный проект.

Вебинар PVS-Studio объясняет, зачем писать собственный статический анализатор для языка Go и какие ошибки в коде стандартные инструменты, такие как go vet и staticcheck, диагностируют не во всех случаях.

О чём видео

Вебинар ведёт Глеб, разработчик PVS-Studio, статического анализатора кода. Он рассказывает, что в этом году команда PVS-Studio начала создавать новый анализатор для Go, и делится опытом, полученным при его разработке и при проверке идеи на стандартных инструментах. Показывается, что go vet встроен в тулчейн Go и применяется при каждой сборке и запуске тестов, а затем на реальных open-source проектах с GitHub (от 10 тысяч до 50 тысяч звёзд и больше) разбираются типичные ошибки: дублирующиеся условия, неверная переменная в проверке, повторяющийся флаг и потерянный результат append. Вебинар завершается постановкой цели: научиться находить такие ошибки собственным анализатором.

Основные темы

  1. Организация вебинара - вопросы можно задавать в чате во время доклада, в конце проходит сессия вопросов и ответов, запись будет отправлена участникам по электронной почте.
  2. Статический анализ в экосистеме Go - go vet входит в состав тулчейна Go, поэтому разработчики используют статический анализ при каждом go build и go test.
  3. Простые ошибки в коде - повторная проверка одного и того же условия; пример из популярного проекта на GitHub, где во вложенной проверке вместо переменной err2 по ошибке указана err.
  4. Условия, которые трудно заметить - три цветовых компонента, из которых один проверяется дважды, а другой не проверяется вовсе; то же условие с переставленными операндами.
  5. Копирование кода (copy-paste) в конфигурации - список флагов, в котором один флаг указан дважды; на работу программы это не влияет, потому что флаги комбинируются побитово.
  6. Value receiver и потерянный результат append - различие между безобидной записью в поле копии и реальной ошибкой, при которой результат append теряется.
  7. Цель вебинара - показать, как создать анализатор, находящий такие ошибки.

Термины и определения

  • Статический анализ - процесс поиска дефектов, ошибок и других проблем в коде без его запуска. Время в записи: 01:57.
  • go vet - стандартный анализатор, входящий в состав тулчейна Go; это не отдельный линтер и не расширение, поэтому он работает при go build и go test. Время в записи: 02:18.
  • Тулчейн (toolchain) Go - набор встроенных инструментов самого Go, частью которого является go vet. Время в записи: 02:29.
  • Ложное срабатывание (false positive) - предупреждение анализатора в ситуации, когда реальной ошибки в коде нет. Время в записи: 09:34.
  • Ложноотрицательный результат (false negative) - ситуация, когда анализатор не выдаёт предупреждение, хотя в коде есть реальная ошибка. Время в записи: 10:22.
  • Value receiver - метод Go с получателем-значением: запись в поле внутри такого метода изменяет копию, а не исходный объект. Время в записи: 08:52.
  • Побитовые флаги - набор флагов, объединяемых побитовой операцией; повторение одного и того же флага не нарушает работу, но указывает на ошибку copy-paste. Время в записи: 08:11.

Люди, организации и продукты

  • Глеб - ведущий вебинара, разработчик PVS-Studio.
  • PVS-Studio - статический анализатор кода; в этом году его команда начала разработку анализатора для языка Go.
  • go vet - стандартный анализатор языка Go.
  • staticcheck - линтер для Go, рассмотренный на примере метода с value receiver.
  • GoCritic - линтер для Go, использованный в сравнении на тех же примерах.
  • GitHub - платформа, с которой взяты реальные open-source проекты для примеров.

Ключевые числа и даты

  • От 10 000 звёзд на GitHub - популярность проекта, использованного в первом реальном примере; в других проектах 50 000 звёзд и больше.

Главные выводы

  • go vet входит в тулчейн Go, поэтому статический анализ используется разработчиками на Go в повседневной работе.
  • Простые ошибки, такие как дублирующееся условие, не зависят от опыта разработчика, языка и размера проекта.
  • Разные инструменты по-разному обрабатывают одни и те же шаблоны кода, поэтому собственный анализатор позволяет настроить поиск ошибок под конкретные задачи.

Кому будет полезно

Разработчикам на Go, которые используют go vet и линтеры и хотят понять границы стандартных инструментов, а также тем, кто интересуется устройством статических анализаторов.

Подписаться на рассылку
Хотите раз в месяц получать от нас подборку вышедших в этот период самых интересных статей и новостей? Подписывайтесь!

Комментарии (0)

Следующие комментарии next comments
close comment form