TGViewer
Thank Go! Thank Go! @thank_go · 3.32K subscribers
Post #269 2.58K
Встроенные функции

Все регулярно используют встроенные функции (built-in). Это функции, которые не требуют импорта пакета, вроде len, make или panic.

Но что такое вообще встроенная функция? Например, len в документации заявлена как часть пакета builtin:

func len(v Type) int


Во-первых, что это еще за builtin-пакет и тип Type в нем?

Во-вторых, len явно дженерик, так где же наша любимая абракадабра вида len[S ~[]E, E any](x S), ну или хотя бы len[T any](s []T)?

И как вообще это добро работало начиная с версии Go 1.0, когда никаких дженериков даже на горизонте не было?

Суровая правда в том, что len — вообще не функция. У нее нет собственного фрейма на стеке, как у обычных функций, и других присущих им особенностей.

На самом деле, компилятор превращает вызов len(s) в прямое чтение s.len, где len — это обычное поле структуры среза (или аналогичное поле строки, карты или канала):

type slice struct {
array unsafe.Pointer
len int
cap int
}


Не все билтины настолько просты. Например, make и panic компилируются в реальные вызовы функций (runtime.makeslice, runtime.gopanic) — с фреймом и всем полагающимся.

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

Что касается Type, то это просто заглушка. Пакет builtin не компилируется и существует только ради документации.

Такое вот коварство.
  • 🔥 32
  • 👍 8
  • ❤ 4
More from @thank_go
  1. Sep 26, 2026Шпаргалка по многозадачности Подготовил интерактивную памятку по многозадачности в Go: — Г…
  2. Sep 2, 2026Множественный разврат возврат Сколько значений можно вернуть из функции через multi-return…
  3. Aug 31, 2026Ошибка ошибка ошибка ошибка Это выражение выглядит странновато, но оно полностью корректно…
  4. Aug 30, 2026Post #280
  5. Aug 25, 2026JSON v2 в Go 1.27 Вторая версия json-пакета впервые появилась как экспериментальная в Go 1…
  6. Aug 12, 2026strings.CutLast Из небольших изменений в Go 1.27 я больше всего рад strings.CutLast. Эта ф…
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 →