Дали метод конкретного типа, теперь он объявляет свои параметры типа:
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 мягче моей: "не умеем реализовать вызовы таких методов, по крайней мере эффективно".
Так что типобезопасные плагины через интерфейсы стоят в очереди не за релизом, а за идеей, как это исполнять...
