2015-01-29 8 views
5

Jak działają funkcje go go len() i make()? Ponieważ język nie obsługuje zarówno generycznych, jak i przeładowań funkcji, nie widzę możliwości, aby func len(v Type) int był możliwy. To samo dotyczy func make(Type, size IntegerType) Type.Golang: W jaki sposób działają funkcje len() i make()?

I nie wydaje się znaleźć funkcji w źródle odejść, najbliżej udało mi się znaleźć to this

Odpowiedz

9

W len i make funkcje są częścią specyfikacji języka i wbudowany w kompilator . Obsługa środowiska wykonawczego dla wbudowanych funkcji jest dostępna pod numerem runtime package.

Plik builtin.go służy wyłącznie do dokumentacji. Nie jest skompilowany.

+1

Więcej niż bycie częścią kompilatora: jest zakodowane jako część specyfikacji języka. https://golang.org/ref/spec#Length_and_capacity https://golang.org/ref/spec#Making_slices_maps_and_channels – dyoo

+2

len jest także jedyną "funkcją" zdolną do zwrócenia stałej (gdy jest używana na tablicach). Spec daje wbudowane specjalne moce, których zwykli śmiertelnicy nie mogą dopasować. –

+0

Czy istnieje link do dokładnego miejsca, w którym 'len' jest faktycznie zaimplementowany? –

1

Ze względu na ścisłe typy Go, kompilator zawsze wie, jaki typ przechodzi do funkcji len, a więc przechodzi do innej funkcji dla różnych typów, które można określić podczas kompilacji. W większości przypadków próbujesz uzyskać długość plastra, w którym to przypadku funkcja len potrzebuje tylko zwrócić pole len dla struktury tego plastra (ponieważ plasterek jest w rzeczywistości strukturą); to samo dla ciągu.

Kompilatory mają różne rodzaje sztuczek, kod zespołu generowany przez kompilator rzadko odpowiada dokładnie tej samej logice, którą wpisałeś.