ProgramlamaGo geliştirici

Sabitler (const), iota ve Go'daki türlerle çalışma özelliklerini açıklayın. Neden ikincil tür belirtilmeden iota sabit ataması beklenmedik sonuçlar verebilir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

Go'daki sabitler (const), derleme aşamasında hesaplanır ve dolaylı bir tür alabilir. iota, sabit blokları tanımlarken ardışık değerleri oluşturmak için kullanılan özel bir tanımlayıcıdır. iota her yeni sabit için blok içinde birer birer artar.

Tür belirtilmeden atama yapmak, sabitin beklenilen türü almasını engelleyebilir, özellikle matematik veya mantık işlemlerinde kullanıldığında. Bu dolaylı dönüşümlere ve derleme hatalarına yol açabilir.

Örnek:

type Level int const ( Low Level = iota // Low: Level == 0 Medium // Medium: Level == 1 High // High: Level == 2 ) // Eğer tür belirtilmezse: const ( Foo = iota // Foo: int == 0 Bar // Bar: int == 1 )

Soru Tuzağı

Tür belirtilmeden iota kullanımıyla bir sabitin "tipleştirilmesi" mümkün mü ve bu sabitin tipi ne olur?

Cevap: Tür açıkça belirtilmezse, sabit tipine sahip olmaktan çıkar ve kullanım bağlamına göre çıkarılan türü alır (örneğin, aritmetikte kullanılıyorsa int olur). Bu, tür aliasları kullanıldığında veya sıkı tip gereksinimleri olduğunda sorunlara yol açabilir.

Örnek:

type Status uint8 const ( Ready Status = iota+1 // Tamam // Eğer sadece const Ready = iota+1 olarak tanımlansaydı — tür int olurdu, Status değil )

Konunun incelikleri nedeniyle gerçek hata örnekleri


Hikaye

JSON üzerinden durumu serileştiren bir geliştirici, açık tür olmadan iota kullanarak sabitler tanımladı. Sonuç — serileştirme, insan tarafından okunabilir bir dize yerine int dönüyor, bu nedenle frontend gelen değeri yanlış yorumlamaya başladı.


Hikaye

Projede State (type State int) tipi tanımlandı, ancak sabitler açık tür olmadan bırakıldı. Bu, arabirimlerin State türündeki değerleri alamamasına yol açtı ve sabitler ile değişkenler arasında tür uyuşmazlığı nedeniyle rahatsız edici hatalar ortaya çıktı.


Hikaye

Bir mühendis, türü belirtmeden iota aracılığıyla yeni bir enum değeri ekledi. Sonuç olarak derleyici, sabiti int türündeki herhangi bir değişken ile karşılaştırmaya izin verdi, bu da üretimde iş mantığı dalgalanmalarına neden oldu.