TGViewer
igoroutine.courses igoroutine.courses @igoroutine_courses · 239 subscribers
Post #14 1.94K
Что будет выведено в stdout?

С точки зрения стандарта языка:

Each type argument is substituted for its corresponding type parameter in the generic declaration. This substitution happens across the entire function or type declaration, including the type parameter list itself and any types in that list.

То есть, тип, объявленный внутри generic-функции insert[T], автоматически захватывает любой T, даже, если сам этот тип не использует T явно.

Таким образом, в
m будут ключи Data[string] и Data[int] и len(m) == 2.

https://go.dev/play/p/Nl250o6wX2X

Но всё немного тоньше. Если написать сигнатуру
func insert[T comparable](m map[any]T, a T), то итоговый ответ будет 1, но почему?

https://go.dev/play/p/EkkuBuwtQJ6

Потому что компилятор попытается вывести тип
T и ему подойдёт только any, следовательно, в m будет всегда один ключ Data[any].

Two instantiated types are identical if they are instantiated from the same generic type and with the same full‑form type argument list.

В таких ситуациях нужно внимательно смотреть за выводом типов

🙄🙄 Ещё больше примеров на курсах
  • 🔥 9
More from @igoroutine_courses
  1. Jun 25, 2026Разбор задачи с порядком вызова функций в select Что будет выведено в stdout после запуска…
  2. Jun 24, 2026Post #40
  3. Jun 24, 2026photo post
  4. Mar 24, 2026😎😎 Это изменение сломало set на map[key]struct{}, который мы знали Продолжение предыдуще…
  5. Mar 23, 2026😎😎 Это изменение сломало Set на map[key]struct{}, который мы знали В Go все привыкли пис…
  6. Mar 5, 2026😎😎 От этого data race не спасает даже race detector Продолжение к предыдущему посту. Ита…
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 →