2015-01-29 3 views
5

Как работают функции len() и make()? Поскольку язык не имеет поддержки как для дженериков, так и для перегрузки функций, я не вижу, как возможно func len(v Type) int. То же самое касается func make(Type, size IntegerType) Type.Golang: Как работают функции len() и make() go?

Я не могу найти эту функцию в источнике идет, мне ближе всего удалось найти это this

ответ

9

В len и make функций является частью спецификации языка и встроенные в компилятор , Поддержка времени выполнения встроенных функций - это runtime package.

Файл builtin.go используется только для документации. Это не скомпилировано.

+1

Больше, чем это часть компилятора: он жестко закодирован как часть спецификации языка. https://golang.org/ref/spec#Length_and_capacity https://golang.org/ref/spec#Making_slices_maps_and_channels – dyoo

+2

len также является единственной «функцией», способной возвращать const (при использовании на массивах). Спектр дает встроенные специальные полномочия, которые простые программисты не могут сравниться. –

+0

Есть ли ссылка на точное место, где 'len' фактически реализован? –

1

Из-за строгих типов Go, компилятор всегда знает, какой тип вы переходите в функцию len, и поэтому он переходит к другой функции для разных типов, которая может быть определена во время компиляции. В большинстве случаев вы пытаетесь получить длину среза, и в этом случае функция len должна возвращать только поле len для этой структуры среза (поскольку срез действительно является структурой); то же самое для строки.

У компиляторов есть всевозможные трюки, код сборки, сгенерированный компилятором, редко следует той же логике, которую вы набрали.

Смежные вопросы