TGViewer
dev notes dev notes @junsenior · 1.39K subscribers
Post #347 451
В марте я писал про пропозал с дженерик-методами - https://t.me/junsenior/332, и вот 2 недели назад с релизом Go 1.27 его зарелизили.

Что это меняет: раньше любой метод не мог иметь дженерик-параметры, например:

type SomeStruct struct {
intField int
}

// syntax error
func (s SomeStruct) Map[U any](mapFunc func(int) U) U {
return mapFunc(s.intField)
}


Вместо методов, если на тип нужно навесить метод с дженерик-типом, заводились обычные функции:

func Map[U any](s SomeStruct, mapFunc func (int) U) U {
return mapFunc(s.intField)
}


Теперь же пример выше - полностью валиден для любых методов, не только для структур. И теперь такие методы разблокировали нам цепочки вызовов:

type Box[T any] struct {
val T
}

func (b Box[T]) Map[U any](mapFunc func(T) U) Box[U] {
return Box[U]{val: mapFunc(b.val)}
}

b := Box[int]{val: 42}

res := b.Map(strconv.Itoa).
Map(func(s string) string {
return "user-" + s
}).
Map(strings.ToUpper)

// USER-42
fmt.Printf("%#v\n", res)


В пакете math/rand/v2 уже можно найти пример:

func (r *Rand) N[Int intType](n Int) Int {
if n <= 0 {
panic("invalid argument to N")
}

return Int(r.uint64n(uint64(n)))
}


А в 1.26 вместо него в пакете была обычная функция:

func N[Int intType](n Int) Int {
if n <= 0 {
panic("invalid argument to N")
}
return Int(globalRand.uint64n(uint64(n)))
}


Как мы помним, этот пропозал неплохо так поджог жопу комьюнити: как в комментах на github, так и в тредах на реддите, но тем не менее - его довезли.
От отрицания я пришел к тому что дженерики, глобально, делают код удобней, если их правильно применять - видел несколько проектов, куда они очень хорошо ложились. Добавить в них методы, раз сами дженерики и так много лет уже как в языке - решение правильное. Надо было или вообще дженерики не завозить, или, если завезли - то уж доработать.

В целом, релиз 1.27 получился интересным. Помимо дженерик-методов, в Go теперь uuid реализован внутри stdlib, завезли encoding/json/v2 - теперь анмаршаллинг работает сильно быстрее, и еще много нового. Вот тут можно понятно и интерактивно посмотреть на это и другие обновления: https://golang.guide/go-1-27/

Ну и когда почти весь код пишет AI - важно следить и понимать что происходит в языке и в инструментах, с которыми мы работаем: как минимум - на собесе AI не всегда успеет ответить, а как максимум - код нужно ревьювить и понимать, иначе любой проект быстро скатится в неподдерживаемый нейрослоп 🏁
  • 🔥 4
  • 👾 3
  • 👍 2
  • ❤ 1
More from @junsenior
  1. Sep 28, 2026Сошлись две вещи. Первая - мой проект safemap.ai, про который я уже писал выше - интеракти…
  2. Sep 17, 2026Post #356
  3. Sep 15, 2026Увидел тут в x.com статистику вакансий по PHP и статистику вакансий по hh.ru в целом. Я на…
  4. Sep 12, 2026Вдохновившись проектом, где делали интерактивную карту с тем, как работает Postgres (писал…
  5. Sep 8, 2026OpenAI выложили блогпост https://openai.com/index/navier-stokes-solution/ Мы публикуем реш…
  6. Sep 8, 2026Если кто не знал, вокруг этого сейчас разгорается очень большой скандал с OpenAI. Кратко,…
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 →