Go'da Empty Interface: Heap Allocation Nedir? – webdedik gönderisi

Go'da Empty Interface: Heap Allocation Nedir?

Go'da `interface{}` (veya `any`) kullanırken arkasında neler döndüğünü hiç merak ettiniz mi? Çoğu geliştirici bunu bir kural olarak bilir, mesela nil pointer'ı `interface{}` içine koyup nil ile karşılaştırdığınızda eşit çıkmaz. Ama bunun neden böyle olduğunu anlamak, performans sorunlarından kaçınmanızı sağlar.

Her değer `interface{}` içine girdiğinde Go, o değerin türü ve verisini saklayan bir yapı oluşturur. Nil pointer örneğinde, pointer değeri nil olsa bile, interface içinde bir tür bilgisi vardır. Bu yüzden `nil` ile karşılaştırma başarısız olur, interface boş değildir, içinde bir tür taşır.

Asıl dikkat etmeniz gereken şey heap allocation. Bazı değerler `interface{}` içine girerken bellekte yeni bir alan ayrılır. Mesela büyük struct'lar veya slice'lar gibi karmaşık türler heap'e taşınır. Bu, sıkı döngülerde veya yüksek trafikli kodda performans kaybına neden olabilir. Basit türler (int, bool gibi) genellikle daha ucuzdur, ama bu da duruma bağlı değişir.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

YouTube'daki video bu konuyu derinlemesine açıyor, hangi durumda allocation olur, hangi durumda olmaz, ve bunu nasıl optimize edersiniz. Go'da performans önemli ise, bu tuzakları bilmek gerekir. Özellikle generic'ler gelmeden önce `interface{}` sık kullanıldığından, eski kodda bu sorunlarla karşılaşabilirsiniz.

Video: Go Empty Interface Explained & The Hidden Heap Allocation

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz