👨💻 Что делать, если go fix сломал поведение — 30 мая 2026 г. в 07:21:00.993
👨💻 Что делать, если go fix сломал поведение В Go 1.26 go fix переписан с нуля. Теперь это полноценный движок модернизации: заменяет if/else на min/max, переписывает циклы на range-over-int, подставляет strings.Cut вместо strings.Index — и ещё десятки трансформаций за один запуск. Звучит удобно. Но после go fix ./... код может сломаться или, хуже, молча изменить поведение. Два типа конфликтов Синтаксические — go fix ловит сам и просит запустить повторно. Семантические — опаснее. Две независимые правки вместе могут сделать переменную неиспользуемой — и это уже ошибка компиляции. Лишние импорты инструмент уберёт сам, но с переменными придётся разбираться вручную. Тихие изменения поведения appendclipped заменяет append([]T(nil), s...) на slices.Clone(s). Если s пустой — Clone вернёт nil. Для JSON это разница между null и []. Анализатор по умолчанию выключен, но показательно. slicescontains заменяет цикл на slices.Contains. Если выражение для искомого элемента имело побочные эффекты — поведение изменится. Этот баг попал в трекер и был исправлен в 1.26.3. Как работать безопасно Сначала смотрите diff без применения: go fix -diff ./... Запускайте из чистого git-состояния, в отдельной ветке. Если сломалось — изолируйте анализатор: go fix -slicescontains=false ./... go fix -minmax ./... Не забывайте про платформы: один запуск обрабатывает только текущую конфигурацию сборки. Для мультиплатформенных проектов запускайте с разными GOOS/GOARCH. go fix — мощный инструмент, но не автопилот.

