Обещали, рассказали 📆
Пост в официальном блоге Go
Итак, в v1.26 полностью переписали
go fix — теперь это полноценный инструмент автоматической модернизации кода, а не заброшенный реликт из ранних версий языка.Как пользоваться:
$ go fix ./... # исправить всё
$ go fix -diff ./... # только посмотреть что изменится
$ go tool fix help # список всех анализаторов
Примеры того, что он умеет автоматически исправлять:
-
interface{} → any-
for i := 0; i < n; i++ → for range n-
strings.Index + слайсинг → strings.CutИли даже целые конструкции, например:
x := f()
if x < 0 {
x = 0
}
if x > 100 {
x = 100
}
Превратится в такое:
min(max(x, 0), 100)(хотя, на мой взгляд, так читается чуть сложнее, но тут дело вкуса)
- квадратичная конкатенация строк в loop →
strings.BuilderЕщё одна интересная штука — синергия фиксов: один fix открывает возможность для другого. Поэтому иногда стоит запустить команду дважды.
————
Интересная деталь из статьи: одной из причин взяться за это стали LLM-инструменты. Они генерируют код в стиле "среднего по больнице" обучающего корпуса — то есть с устаревшими паттернами. Порой они даже отрицают существование новых фич, когда их явно просят их использовать 👍
🟢 Что я могу тут сказать, инструмент крутой, пользоваться надо обязательно.
#go1_26 #go_official #tooling