GitTalent
Havuz
Depo ayrıntısı

typesafe-docs/iterleak

Go analyzer that reports iter.Pull and iter.Pull2 calls whose stop function can go uncalled and leak a goroutine.

Go MIT 28 Eylül 2026 son push 28 Eylül 2026 10 fork
Yıldız
68+38 · 35 gün
Commit · 28g
0
son 28 günde
Yazar · 28g
0
farklı katkıcı

Hızlı değerlendirme

önem 38uyum 5gpt-6-luna

Ö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.