typesafe-docs/iterleak
Go analyzer that reports iter.Pull and iter.Pull2 calls whose stop function can go uncalled and leak a goroutine.
Hızlı değerlendirme
Özet
iterleak, Go kodunda `iter.Pull` ve `iter.Pull2` çağrılarının `stop` fonksiyonu çağrılmadan kalıp goroutine sızıntısına yol açabileceği durumları bulan bir static analyzer.
Profiline uyum
Go iterator’larında goroutine sızıntısını denetler; profilinizde Go geliştirme veya Go lint araçlarına yönelik bir ihtiyaç bulunmuyor.
Neden yükseliyor
1 günlük bir repoda 30 yıldız ve son 28 günde 3 commit görünüyor. Zamanlama, Go iterator’larında gözden kaçabilen goroutine sızıntısı gibi somut bir hata sınıfına odaklanmasıyla uyumlu; ancak bu ilginin kesin nedenini veya kalıcı benimsemeyi mevcut verilerle doğrulamak mümkün değil.
Problem
`iter.Pull` veya `iter.Pull2` ile başlatılan iterator erken bırakıldığında, `stop` çağrılmazsa iterator’ın arka plan goroutine’i takılı kalabilir; bu hata standart `go vet` ve README’de kontrol edildiği belirtilen `staticcheck` tarafından yakalanmıyor.
Çözüm
Go AST ve `types.Info` üzerinden `iter.Pull`/`iter.Pull2` çağrılarını ve `stop` değerinin kullanıldığı yolları inceliyor. README’ye göre yaklaşım, benzer kaynak-kapatma kontrolü yapan `lostcancel` analyzer’ından uyarlanmış ve `go vet` aracı, standalone binary veya başka analyzer’larla birlikte kullanılabiliyor.
Yenilik
Genel static analysis yaklaşımı yeni değil; yenilik, `iter.Pull` ve `iter.Pull2` için `stop` çağrısının atlanmasını hedefleyen özel bir kontrol sunması. README gerçek projelerde iki true positive bulduğunu ve örnekleminde false positive görmediğini bildiriyor; bu, sınırlı ve proje tarafından sunulan kanıt.
Teknolojiler
- Go
- go/analysis
- go vet
- golangci-lint
Riskler
- Proje çok yeni; 3 commit ve tek farklı yazar, bakım sürekliliği ve olgunluk hakkında sınırlı kanıt sunuyor.
- README’deki gerçek kod taraması 9 repo ile sınırlı; sonuçlar geniş kullanım alanında false positive veya false negative olmadığını kanıtlamıyor.
- `go vet -vettool` ile çalıştırıldığında README’nin ölçtüğü Go toolchain sürümünde bulgular olsa bile süreç 0 çıkış kodu verebiliyor; CI’de yalnızca çıkış koduna güvenmek uygun olmayabilir.
- Analyzer yalnızca `iter.Pull` ve `iter.Pull2` kaynaklı bu belirli sızıntı sınıfına odaklanıyor; genel goroutine leak tespiti sunmuyor.
Detaylı değerlendirme
Bu repo için detaylı değerlendirme henüz yapılmadı. Analiz, Ayarlar'daki uyum profilini hesaba katarak "bu işime yarar mı" sorusunu cevaplıyor. Bir kez çalışır; günlük koşular buna dokunmaz. Saatlik sınır var — bir kaynaktan en fazla 3 analiz.