- Yaklaşan Go 1.22 sürümü, birçok şirkette üretim sorunlarına yol açan
for döngüsü kapsamıyla ilgili yaygın bir hatayı düzeltmeyi planlıyor.
- Sorun, yineleme sona erdikten sonra döngü değişkenine olan bir referansın korunması ve bunun sonucunda değişkenin istenmeyen yeni bir değer almasıyla ortaya çıkıyor.
- Bu sorun hem eşzamanlı hem de eşzamanlı olmayan Go kodlarında yaygındır; referansın değişkenin ömrünü yinelemenin ötesine taşıyıp taşımadığını analiz etmenin karmaşıklığı nedeniyle tespit edilmesi ve düzeltilmesi zordur.
- Bu tür hataları tespit eden mevcut araçlar sık sık yanlış negatif veya yanlış pozitif sonuçlar üretir; bu da gereksiz kod değişikliklerine ya da gözden kaçan sorunlara yol açar.
- Go 1.22'de önerilen düzeltme,
for döngülerinin yineleme kapsamı yerine döngü kapsamına sahip olacak şekilde değiştirilmesidir; böylece bu tür hatalar ve isabetsiz araçlara duyulan ihtiyaç ortadan kalkacaktır.
- Geriye dönük uyumluluğu korumak için yeni anlambilim yalnızca
go.mod dosyasında Go 1.22 veya üzerini bildiren modüllerdeki paketlere uygulanacaktır.
- Geliştiriciler, belirli paketlerde anlambilimin ne zaman değişeceğini kontrol edebilecek ve mevcut kod şu an olduğu gibi çalışmaya devam edecektir.
- Go 1.21, ortamda
GOEXPERIMENT=loopvar ayarlanarak etkinleştirilebilen bu kapsam değişikliğinin bir önizlemesini içerir.
- Bu değişiklik Google içinde kapsamlı biçimde test edildi ve üretim kodunda bildirilen bir sorun olmadı.
- Ancak, döngü değişkeni sorunu nedeniyle aslında test etmek istedikleri şeyi test edemeyen bazı testlerin düzeltilmesi gerekti.
- Go 1.21'in
loopclosure analizcisi, bu tür sorunları tespit edip raporlamada iyileştirildi; böylece geliştiricilerin Go 1.22'deki değişikliğe hazırlanmasına yardımcı oluyor.
- Bu değişiklik hakkında daha fazla bilgi tasarım belgesinde ve SSS'de bulunabilir.
1 yorum
Hacker News görüşü
Go 1.22içindekifor loopssorununa dair tartışma; odak noktası, closure'larda döngü değişkeninin hatalı kullanımı