2015-01-29 20 views
5

len() ve make() işlevleri nasıl çalışır? Dil, hem jenerik hem de fonksiyon aşırı yüklenmesini desteklemediğinden, func len(v Type) int'un nasıl olduğunu göremiyorum. Aynı şey func make(Type, size IntegerType) Type için de geçerlidir.Golang: go's len() ve make() işlevleri nasıl çalışır?

ben gidip kaynağında fonksiyonunu bulmak gibi olamaz, ben bulmak için başardınız yakın this

cevap

9

len ve make fonksiyonları dil özelliklerinin bir parçası ve yerleşik derleyici olmasıdır . Yerleşik işlevler için çalışma zamanı desteği runtime package'dadır.

dosya builtin.go sadece dokümantasyon için kullanılır. Derlenmiş değil.

+1

Derleyicinin bir parçası olmaktan daha fazlası: dil belirtiminin bir parçası olarak kodlanmış. https://golang.org/ref/spec#Length_and_capacity https://golang.org/ref/spec#Making_slices_maps_and_channels – dyoo

+2

len bir const (diziler kullanıldığında) dönen yeteneğine sahip tek "işlev" da. Bu özellik, sadece fani programcıların eşleştiremeyeceği yerleşik güçler veriyor. –

+0

'len''nin gerçekte uygulandığı tam olarak bir yer var mı? –

1

Go'nun katı türleri nedeniyle, derleyici her zaman len işlevine ne tür bir geçiş yaptığınızı bilir ve bu nedenle derleme zamanında belirlenebilen farklı türler için farklı bir işleve gider. Çoğu durumda, bir dilim uzunluğunu elde etmeye çalışıyorsunuz, bu durumda len işlevinin yalnızca bu dilimin yapısına ilişkin len alanını döndürmesi gerekiyor (bir dilim gerçekten bir yapı olduğundan); bir dize için aynı.

Derleyiciler türlü numaralar var, derleyici tarafından üretilen montaj kodu nadiren tam olarak yazdığınız aynı mantık izler.