opencode’i Go projenizin kökünde opencode komutuyla başlattığınızda, ajan proje bağlamını okur ve AGENTS.md dosyasındaki talimatlara göre hareket eder. Bu rehberde, Go’ya özgü iş akışını somut komutlar, kurulum ipuçları ve sık yapılan hatalar üzerinden anlatıyorum; böylece ajanı gofmt, go test ve goroutine dünyasında güvenle kullanabilirsiniz. Genel kullanım için opencode sayfasına bakabilirsiniz.
Neden opencode Go işlerine uygun
Go’nun belirgin kuralları, opencode gibi ajanların üretimini öngörülebilir kılar. gofmt her dosyayı aynı biçime sokar; go vet yaygın hataları yakalar; hata değerleri açıkça döndürülür. Bu yüzden ajan, PEP 8 veya benzeri öznel stil tartışmalarına takılmaz ve diff’ler daha temiz çıkar. Ayrıca Go modülleri go.mod ve go.sum üzerinden bağımlılıkları netleştirir; ajan go mod tidy çalıştırarak eksik paketleri çözebilir.
Go ekosistemi, ajanın işini kolaylaştıran başka avantajlar da sunar. Standart kütüphanenin zenginliği sayesinde birçok görev dış bağımlılık eklemeden çözülebilir; bu, ajanın gereksiz paket eklemesini azaltır. Küçük arayüzler ve io.Reader/io.Writer gibi evrensel tipler, üretilen kodun mevcut yapıya uyumunu artırır. Ayrıca Go’nun basit hata yönetimi (değer döndürme, %w sarmalama) sayesinde ajanın hata akışını bozması daha kolay fark edilir. Derleme hızı yüksek olduğundan, ajan go build veya go test çağrılarını hızlıca yapıp geri bildirim alabilir; bu da iterasyon döngüsünü kısaltır.
Proje kurulumu ve AGENTS.md
opencode, proje talimatlarını AGENTS.md dosyasından okur. Go projesi için bu dosyaya komutlar, klasör düzeni ve kalıp tercihleri yazmak, ajanın her seferinde doğru varsayımlarla başlamasını sağlar. Aşağıdaki örnek, küçük bir servis projesi için yeterli bir başlangıçtır:
# AGENTS.md
## Proje düzeni
- cmd/ altında uygulama giriş noktaları, internal/ altında paylaşılmayan paketler.
- Her paket kendi testlerini içerir; test dosyaları _test.go ile biter.
## Komutlar
- Bağımlılık yönetimi: go mod tidy
- Derleme: go build ./...
- Test: go test -race -count=1 ./...
- Lint: go vet ./... && gofmt -l .
## Kurallar
- Fonksiyon imzalarında context.Context ilk parametre olarak geç; gerekmedikçe context.TODO() kullanma.
- Testlerde tablo testi kalıbını kullan; her satırda name, input, want alanları olsun.
- Hataları %w ile sarmala; hatanın bağlamını kaybetme.
- Arayüzleri tüketen tarafta, küçük ve tek sorumluluklu tanımla.
- Değişiklikleri göndermeden önce gofmt -w ile biçimlendir; gofmt -l . çıktısı boş olmalı.
Bu dosyayı proje köküne koyun ve opencode’i başlatmadan önce güncel tutun. AGENTS.md ne kadar spesifik olursa, ajan o kadar az yanlış varsayım yapar. Örneğin, yalnızca go test ./... çalıştırın demek yerine -race ve -count=1 eklemek, yarış koşullarını ve önbellek sorunlarını baştan önler. Aynı şekilde, paketler arası import yönünü belirtmek (cmd -> internal gibi) ajanın yanlış bağımlılık oluşturmasını engeller. Kurulum ve genel adımlar için opencode nasıl kullanılır? rehberine göz atabilirsiniz.
Çalışma döngüsü ve örnek promptlar
opencode ile sağlıklı bir döngü şöyle işler: önce küçük ve net bir görev tanımlayın; ajanın planını isteyin; ardından uygulama adımını başlatın; sonucu git diff ile inceleyin; en sonunda testleri ve lint komutlarını çalıştırmasını sağlayın. Büyük refactor’leri tek prompta sığdırmak yerine paket paket ilerleyin. Plan aşamasında ajana değişiklik yapmadan önce niyetini açıklamasını söylemek, yanlış yöne gitmesini engeller. Örneğin, “Önce şu dosyayı incele, sonra hangi arayüzü çıkaracağını söyle” gibi talimatlar işe yarar. İşte tipik Go görevleri için kullanabileceğiniz promptlar:
- “Bu servisteki HTTP handler fonksiyonlarını context.Context alacak şekilde güncelle; ardından
go test ./...çalıştırıp kırmızı testleri düzelt.” - “Kullanıcı deposu için
UserStorearayüzü çıkar; sahte (fake) implementasyonla tablo testi yaz,go test -run TestUserStoreile doğrula.” - “Goroutine kullanan
workerpaketini tara, context iptali yayılmasını sağla;go vet ./...vego test -race ./...çalıştır.” - “Tüm hata sarmalamalarını
%wile güncelle, ilgili testleri değiştir vegofmt -l .çıktısını temizle.” - “
cmd/serveriçindeki main fonksiyonunu parçala; yapılandırma yüklemeyi ayrı bir pakete taşı, test edilebilir hale getir vego test ./cmd/server/...çalıştır.”
Her prompttan sonra ajanın çalıştırdığı komutların çıktısını isteyin; test geçiyor dense bile komutları kendiniz de çalıştırabilirsiniz. Özellikle git diff çıktısını satır satır inceleyin; ajan bazen gereksiz import ekleyebilir veya hata mesajlarını değiştirebilir. Gerekirse bir sonraki adımı daraltın.
Tipik Go görevleri ve dikkat edilecek noktalar
Aşağıdaki tablo, opencode’in Go’da iyi olduğu görevler ile gözden kaçabilecek noktaları özetler:
| Görev | İyi prompt | Dikkat edilecek nokta |
|---|---|---|
| Arayüz çıkarma | “Arayüzü tüketen tarafta tanımla, yalnızca kullanılan metotları içersin.” | Ajan gereksiz büyük arayüz üretebilir; diff’te metot sayısını azaltın. |
| Goroutine ve context | “context iptali ile worker’ı durdur; kanal kapanışlarını ele al.” | Ajan context’i tüm alt çağrılara yaymayı unutabilir; -race testi ile doğrulayın. |
| Tablo testi yazma | “Başarılı, hatalı ve sınır durumları için tablo testi ekle.” | Testler yeşil görünüp gerçek davranışı doğrulamayabilir; assertion’ları inceleyin. |
| Hata sarmalama | “Hataları %w ile sarmala; errors.Is çalışmaya devam etsin.” | Ajan %v kullanabilir veya orijinal hatayı kaybedebilir; diff’te kontrol edin. |
| Bağımlılık ekleme | “Bu işlev için standart kütüphanede çözüm varsa onu kullan, yoksa popüler paket öner.” | Ajan gereksiz yere ağır kütüphane ekleyebilir; go.mod diff’ini inceleyin. |
Bunların dışında şu tuzaklara dikkat edin: Go derleyicisi kullanılmayan import veya değişkenleri hata sayar; ajan bazen gereksiz yere import ekleyip çıkarırken kodun başka kısımlarını bozabilir. go mod tidy çağrısı go.sum’da büyük değişiklikler yapabilir; bu komutu yalnızca ihtiyaç olduğunda ve diff’i inceleyerek çalıştırın. Ajanın paket içi bağımlılıkları yanlış yere taşıması veya arayüzleri yanlış pakette tanımlaması sık görülür; AGENTS.md’de net kurallar bunu azaltır. Goroutine içeren kodlarda, ajanın sync.WaitGroup kullanmayı unutması veya kanal kapatma sorumluluğunu yanlış ataması olasıdır; bunları -race testi ile yakalayın. Ayrıca ajan, tablo testlerinde t.Parallel() ekleyip test sıralamasını bozabilir; her senaryonun bağımsız olduğundan emin olun.
Go test ve doğrulama
Ajanın “testler geçti” demesine güvenmeyin; her değişiklikten sonra şu komutları çalıştırmasını isteyin veya kendiniz çalıştırın:
go test -race -count=1 ./...— yarış koşullarını ve goroutine hatalarını yakalar;-count=1önbelleği devre dışı bırakır.go vet ./...— yanlış printf kullanımı, kopyalanmış kilit gibi statik hataları bulur.gofmt -l .— biçimlendirilmemiş dosyaları listeler; çıktı boş olmalı.go build ./...— derleme hatalarını yakalar; testlerin derlenmesi ayrıca kontrol edilir.
Ajanın ürettiği test dosyalarını ayrıca inceleyin. Tablo testlerinde her senaryonun gerçekten farklı bir davranışı doğruladığından emin olun; bazen ajan hatalı kodu yeşile çevirmek için testi zayıflatabilir. Şüpheli durumlarda go test -run TestAdı -v ile yalnızca ilgili testi çalıştırıp çıktıyı gözden geçirin. Kapsama zayıfsa go test -cover ./... ile eksik paketleri belirleyin ve ajana bu paketler için test istemeyi düşünün. Ajanın eklediği testlerde testing.T yerine testing.B kullanması veya benchmark’ları yanlış yere koyması da olabilir; bunları manuel olarak doğrulayın.
Birden fazla opencode ajanını paralel çalıştırma
Go projelerinde birden fazla opencode ajanını aynı anda kullanmak isterseniz AgentVera işinizi kolaylaştırır. Her ajan kendi git worktree’sinde çalışabilir; böylece biri go.mod veya aynı paketi düzenlerken diğerinin dosyalarını ezmez. Ajanın turu bittiğinde ikinci bir model kodu otomatik inceler ve bulgularını dosya:satır olarak işaretler; bu, gözden kaçan goroutine veya interface hatalarını yakalar. Ayrıca her turun anlık görüntüsü alınır ve tek tıkla geri alınabilir; hatalı bir refactor’ü hızla eski haline döndürürsünüz. Paralel ajan kullanımı hakkında daha geniş değerlendirme için paralel kodlama ajanları yazısına bakabilirsiniz.
Sonuç
opencode, Go projelerinde AGENTS.md ile net kurallar verildiğinde ve her adım go test/gofmt ile doğrulandığında güçlü bir yardımcıdır. Küçük, ölçülebilir görevler verin; diff’i inceleyin; ajanı asla kontrolsüz bırakmayın. Bu disiplinle, tekrarlayan refactor ve test işlerini ciddi ölçüde hızlandırırsınız.