Все регулярно используют встроенные функции (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 не компилируется и существует только ради документации.
Такое вот коварство.