TGViewer
BASCODE BASCODE @bascodech · 140 subscribers
Post #130 149
Дженерик методы в Go 1.27 приехали, а главную боль не закрыли.

Дали метод конкретного типа, теперь он объявляет свои параметры типа:

func (n *Node[T]) Map[U any](f func(T) U) Node[U]


Собрал на go1.27.0, работает. Раньше дженерик выносили в функцию уровня пакета и корежили читаемость ради компилятора.

А вот возможности положить такой метод в интерфейс по прежнему нельзя, а просили по большей части именно это. Проверил оба захода. В лоб компилятор отвечает сразу:

interface method must have no type parameters


Второй заход хитрее, объявляем интерфейс без дженерика и пробуем удовлетворить его дженерик-методом. Тоже мимо:

*Node[int] does not implement Stringer (wrong type for method Map)
have Map[U any](func(int) U) Node[U]
want Map(func(int) string) Node[string]


Причина не в том, что кто-то не дописал код. Интерфейс диспетчеризуется в рантайме через итаб, таблицу с одним указателем на метод. У дженерик-метода инстанциаций столько, сколько типов подставят вызывающие, и часть из них появится в чужом пакете, который соберут через год. В момент сборки типа этого списка еще нет.

Формулировка в самом proposal мягче моей: "не умеем реализовать вызовы таких методов, по крайней мере эффективно".

Так что типобезопасные плагины через интерфейсы стоят в очереди не за релизом, а за идеей, как это исполнять...
More from @bascodech
  1. Sep 18, 2026Мысли про дебаггинг и IDE в 2026 Вот интересная история... Расс Кокс выложил пять сессий,…
  2. Sep 14, 2026Кодить без AI сейчас как заниматься айкидо. Красиво и глубоко и десять лет до черного пояс…
  3. Sep 7, 2026Выложил свой statusline для claude code в публичный репозиторий. Лимитов у подписки три: п…
  4. Sep 5, 2026Рубрика "лысая мудрость" Как я больше года храбро готовился, но так ничего и не сделал. Вт…
  5. Sep 2, 2026Распаковал 30 релизов Go подряд, 2.9 ГБ исходников. Ради одного вопроса. Вопрос такой: поч…
  6. Aug 29, 2026Сегодня у кого-то будет распаковка :-)
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →