--- description: İdiomatic desenler, eşzamanlılık güvenliği, hata yönetimi ve güvenlik için kapsamlı Go kod incelemesi. go-reviewer agent'ını çağırır. --- # Go Code Review Bu komut, Go'ya özel kapsamlı kod incelemesi için **go-reviewer** agent'ını çağırır. ## Bu Komut Ne Yapar 1. **Go Değişikliklerini Tanımla**: `git diff` ile değiştirilmiş `.go` dosyalarını bul 2. **Static Analiz Çalıştır**: `go vet`, `staticcheck` ve `golangci-lint` yürüt 3. **Güvenlik Taraması**: SQL injection, command injection, race condition'ları kontrol et 4. **Eşzamanlılık İncelemesi**: Goroutine güvenliğini, channel kullanımını, mutex desenlerini analiz et 5. **İdiomatic Go Kontrolü**: Kodun Go kurallarına ve en iyi uygulamalara uyduğunu doğrula 6. **Rapor Oluştur**: Sorunları önem derecesine göre kategorize et ## Ne Zaman Kullanılır `/go-review` komutunu şu durumlarda kullanın: - Go kodu yazdıktan veya değiştirdikten sonra - Go değişikliklerini commit etmeden önce - Go kodu içeren pull request'leri incelerken - Yeni bir Go kod tabanına adapte olurken - İdiomatic Go desenlerini öğrenirken ## İnceleme Kategorileri ### KRİTİK (Düzeltilmeli) - SQL/Command injection açıklıkları - Senkronizasyon olmadan race condition'lar - Goroutine sızıntıları - Hardcode edilmiş kimlik bilgileri - Güvenli olmayan pointer kullanımı - Kritik yollarda göz ardı edilen hatalar ### YÜKSEK (Düzeltilmeli) - Bağlamlı hata sarmalama eksikliği - Hata dönüşleri yerine panic - Context yayılmıyor - Deadlock'a neden olan buffersız channel'lar - Interface yerine getirilmeme hataları - Eksik mutex koruması ### ORTA (Düşünün) - İdiomatic olmayan kod desenleri - Export edilen elementlerde eksik godoc yorumları - Verimsiz string birleştirme - Preallocate edilmemiş slice - Table-driven testler kullanılmamış ## Çalıştırılan Otomatik Kontroller ```bash # Static analiz go vet ./... # Gelişmiş kontroller (kuruluysa) staticcheck ./... golangci-lint run # Race tespiti go build -race ./... # Güvenlik açıklıkları govulncheck ./... ``` ## Örnek Kullanım ```text Kullanıcı: /go-review Agent: # Go Kod İnceleme Raporu ## İncelenen Dosyalar - internal/handler/user.go (değiştirildi) - internal/service/auth.go (değiştirildi) ## Static Analiz Sonuçları ✓ go vet: Sorun yok ✓ staticcheck: Sorun yok ## Bulunan Sorunlar [KRİTİK] Race Condition Dosya: internal/service/auth.go:45 Sorun: Paylaşılan map senkronizasyon olmadan erişiliyor ```go var cache = map[string]*Session{} // Eşzamanlı erişim! func GetSession(id string) *Session { return cache[id] // Race condition } ``` Düzeltme: sync.RWMutex veya sync.Map kullan ```go var ( cache = map[string]*Session{} cacheMu sync.RWMutex ) func GetSession(id string) *Session { cacheMu.RLock() defer cacheMu.RUnlock() return cache[id] } ``` [YÜKSEK] Eksik Hata Bağlamı Dosya: internal/handler/user.go:28 Sorun: Hata bağlam olmadan döndürülüyor ```go return err // Bağlam yok ``` Düzeltme: Bağlamla sarmala ```go return fmt.Errorf("get user %s: %w", userID, err) ``` ## Özet - KRİTİK: 1 - YÜKSEK: 1 - ORTA: 0 Öneri: ❌ KRİTİK sorun düzeltilene kadar merge'i engelle ``` ## Onay Kriterleri | Durum | Koşul | |--------|-----------| | ✅ Onayla | KRİTİK veya YÜKSEK sorun yok | | ⚠️ Uyarı | Sadece ORTA sorunlar (dikkatle merge et) | | ❌ Engelle | KRİTİK veya YÜKSEK sorun bulundu | ## Diğer Komutlarla Entegrasyon - Testlerin geçtiğinden emin olmak için önce `/go-test` kullanın - Build hataları oluşursa `/go-build` kullanın - Commit etmeden önce `/go-review` kullanın - Go'ya özel olmayan endişeler için `/code-review` kullanın ## İlgili - Agent: `agents/go-reviewer.md` - Skills: `skills/golang-patterns/`, `skills/golang-testing/`