Go projesinde terminalde copilot komutuyla başlattığınız GitHub Copilot CLI, paket yapısını, testleri ve standart araç zincirini anlayan bir kodlama ajanıdır. Bu rehberde ajana nasıl net talimat vereceğinizi, hangi görevlerde güvenebileceğinizi ve test döngüsünü nasıl kuracağınızı göreceksiniz. Genel kullanım için GitHub Copilot CLI nasıl kullanılır? adım adım rehberine de bakabilirsiniz.
Neden Go projelerinde GitHub Copilot CLI işe yarar
Go’nun sadeliği ve standart araçları, ajan için net bir çalışma alanı oluşturur. gofmt sayesinde biçim tartışması yoktur; go vet yaygın hataları yakalar; go test ./... ise tüm paketleri tek komutla doğrular. GitHub Copilot CLI bu komutları gerçekten çalıştırabilir, çıktıyı okuyup sonraki adımı planlayabilir. Ayrıca Go’daki hata sarmalama (fmt.Errorf), interface’lerin tüketici tarafında tanımlanması, goroutine’lerde context yayılımı gibi kalıplar ajanın eğitim verisinde güçlü biçimde temsil edilir. Bu yüzden küçük, iyi tanımlanmış görevlerde hızlı sonuç alırsınız.
Ajan ayrıca go.mod dosyasını okuyarak modül bağımlılıklarını ve Go sürümünü anlayabilir; böylece import yolları ve paket kullanımları konusunda doğru öneriler yapar. Örneğin, standart kütüphanede context, net/http veya sync gibi paketlerin kullanımı konusunda Go deyimlerine uygun kod üretir. Bu, özellikle eşzamanlılık ve ağ kodu içeren projelerde büyük kolaylık sağlar. Elbette ajanın önerdiği kodun projenizin mevcut yapısıyla uyumlu olması için net talimatlar vermeniz gerekir.
Projeyi ajan için hazırlama: .github/copilot-instructions.md
GitHub Copilot CLI proje kökünde .github/copilot-instructions.md dosyasını okur; AGENTS.md da çoğu sürümde desteklenir. Dosyayı kısa tutun; Go’ya özgü komutları, klasör düzenini ve kod kurallarını yazın. Ajan her görevde bu talimatı referans alır, böylece her seferinde aynı şeyleri açıklamak zorunda kalmazsınız. Aşağıdaki örnek gerçek bir Go projesi için yeterli bir başlangıçtır:
# Go projesi kuralları
## Komutlar
- Test: `go test ./...`
- Yarış koşulu: `go test -race ./...`
- Statik analiz: `go vet ./...`
- Biçim: `gofmt -l .` çıktısı boş olmalı
## Dizin düzeni
- `cmd/` uygulama giriş noktaları
- `internal/` yalnızca bu modüle özel paketler
- `pkg/` dışa açık kütüphane kodu
## Go kuralları
- `context.Context` her zaman ilk parametre olarak geç; asla `context.Background()`'ı derin katmanlara taşıma.
- Hataları `fmt.Errorf("...: %w", err)` ile sarmala, sentinel error'ları `errors.Is` ile karşılaştır.
- Goroutine başlatmadan önce context iptalini kontrol et; `sync.WaitGroup` kullan.
- Interface'leri tüketici pakette, küçük ve tek sorumluluklu tanımla.
- Testler tablo tabanlı olsun; her test case için açıklayıcı isim kullan.
AGENTS.md benzeri talimat dosyalarını daha ayrıntılı yazmak için CLAUDE.md ve AGENTS.md rehberine göz atabilirsiniz. Talimat dosyasına gereksiz uzunlukta açıklamalar eklemeyin; ajanın en sık yapacağı hataları önleyecek birkaç kural yeterlidir. Örneğin, context kuralları ve hata sarmalama gibi maddeler, üretilen kodun kalitesini belirgin biçimde artırır. Ayrıca test komutlarını netleştirmek, ajanın her değişiklikten sonra testleri kendiliğinden koşmasını sağlar.
Çalışma döngüsü: planla, küçük adımlar at, testleri çalıştır, diff’i incele
Go projelerinde en verimli döngü şöyledir: ajanın önce mevcut kodu ve testleri okumasını isteyin, küçük bir değişiklik planlasın, sonra değişikliği uygulasın. Her adımdan sonra go test ./... çalıştırmasını isteyin. Çıktıyı siz de okuyun; ajan başarısız testi gizleyebilir ya da yanlış yorumlayabilir. Son olarak git diff ile değişiklikleri inceleyin. Özellikle goroutine, context veya interface eklenen yerlerde gözle kontrol şarttır.
Tipik görevler için kullanabileceğiniz istemler:
internal/orderpaketindekiProcessfonksiyonunu context iptali geldiğinde düzgün dönecek şekilde düzenle; değişiklikten sonrago test ./internal/orderçalıştır.UserRepositoryinterface’ini tanımla, PostgreSQL implementasyonunuinternal/storealtına ekle; testlerini tablo tabanlı yaz vego test ./...ile doğrula.workerpaketinde goroutine sızıntısı veya eksik WaitGroup kullanımı var mı incele;go test -race ./...çalıştır ve bulduğun sorunları düzelt.- HTTP istemcisine 3 saniyelik context timeout ekle; kod üzerinde
gofmtçalıştır,go vet ./...ile statik analiz yap. - Mevcut
go test ./...çıktısındaki başarısız testleri tek tek incele; sadece ilgili testleri düzeltecek minimal değişiklikler yap, üretim kodunu gereksiz yere değiştirme.
Ajan her istemden sonra bir özet sunabilir, ancak kodu siz incelemeden kabul etmeyin. Özellikle go.mod veya go.sum değişikliklerini kontrol edin; gereksiz bağımlılık eklenmesini önleyin. Küçük parçalar halinde çalışmak, hatalı bir değişikliği geri almayı kolaylaştırır ve ajanın bağlamını korur.
Tipik Go görevleri ve dikkat edilecek noktalar
GitHub Copilot CLI küçük refactor, test üretimi, hata sarmalama ve context yayılımında iyidir. Ancak Go’nun sadeliği, ajanın bazen gereksiz soyutlama eklemesine veya interface{} kullanmasına yol açabilir. Aşağıdaki tablo sık karşılaşılan durumları özetler:
| Alan | İyi olduğu durum | Dikkat edilecek nokta |
|---|---|---|
| Hata yönetimi | fmt.Errorf ile sarmalama, sentinel error kullanımı | Hata mesajlarını yutma, gereksiz errors.Is zinciri |
| Goroutine ve context | Context yayılımı, WaitGroup, select | context.Background()’ı derine taşıma, goroutine sızıntısı |
| Interface | Küçük, tüketici tarafında interface çıkarma | Gereksiz soyutlama, interface{} kullanımı |
| Test | Tablo tabanlı test üretme, mock yazma | Testleri kopyala-yapıştır, gerçek bağımlılıkları mocklamadan bırakma |
Ajan bir değişiklik önerdiğinde Go’nun deyimlerine uyup uymadığını kontrol edin; özellikle go vet ve gofmt -l çıktısını mutlaka siz de çalıştırın. Goroutine ve context içeren kodlarda, ajanın context iptalini doğru şekilde ele alıp almadığını, select ifadelerinde default dalının gereksiz yere eklenip eklenmediğini inceleyin. Hata yönetiminde %w kullanımının yanı sıra errors.Is ve errors.As için sentinel error’ların doğru tanımlanıp tanımlanmadığını kontrol edin. Interface konusunda, ajanın üretici pakette interface tanımlaması yaygın bir hatadır; bunu talimat dosyanızda engelleyebilirsiniz.
Go’da test ve doğrulama
Test döngüsünde ajanın çalıştırdığı komutların çıktısını isteyin; yalnızca ‘testler geçti’ demesine güvenmeyin. go test ./... tüm paketleri tarar, go test -race ./... goroutine ve channel yarışlarını yakalar. go vet ./... kilitlenme, yanlış printf argümanı gibi hataları bulur; gofmt -l . biçim bozukluklarını listeler. Ajan bu komutları sırayla çalıştırabilir ama her değişiklikten sonra siz de kısa bir git diff ile ne değiştiğine bakın. Özellikle test tablolarında beklenen hata mesajını tam eşleştirmek yerine errors.Is kullanmasını isteyin; aksi halde testler kırılgan olur.
Tablo tabanlı testlerde ajanın her test case için anlamlı bir isim (name) kullanmasını sağlayın ve t.Run ile alt testler oluşturmasını isteyin. Böylece hangi senaryonun başarısız olduğu anında görülür. Eşzamanlı kodlarda go test -race komutunu ajanın her değişiklikten sonra çalıştırmasını talimat dosyasına ekleyin; bu, veri yarışı hatalarını erken yakalar. Ayrıca go vet ile çalıştırmak, yanlış fmt direktifleri veya kopyalanan kilitler gibi sorunları tespit eder. Son olarak, ajanın önerdiği testleri kendiniz de gözden geçirin; bazen üretim kodundaki hatayı gizleyen zayıf testler yazabilir.
Birden fazla ajanı tek Go projesinde çalıştırmak: AgentVera
AgentVera masaüstü uygulaması, GitHub Copilot CLI gibi komut satırı ajanlarını yan yana kendi gerçek terminal panellerinde çalıştırır. Go projelerinde her ajanı ayrı bir git worktree içinde koşturmak dosya çakışmalarını önler; böylece bir ajan go test ile testleri iyileştirirken diğeri aynı anda goroutine sızıntısını araştırabilir. Otomatik kod incelemesi, ajanın her turu bittiğinde değişiklikleri ikinci bir modelin kontrol etmesini sağlar; go vet ve gofmt bulgularının ötesinde mantık hatalarını yakalar. Checkpoint’ler sayesinde beğenmediğiniz bir turu tek tıkla geri alabilirsiniz. Bu çoklu ajan yaklaşımı, Go’daki eşzamanlılık ve context gibi hata ayıklaması zor konularda farklı bakış açılarını hızla karşılaştırmanıza yardımcı olur.
Sonuç
GitHub Copilot CLI, Go projelerinde talimat dosyasıyla yönlendirildiğinde test döngüsünü hızlandırır, ancak her diff’i ve test çıktısını kendiniz doğrulamalısınız. Küçük adımlar, net Go kuralları ve düzenli go test -race kullanımıyla ajanın üretkenliğini güvenle artırabilirsiniz. Daha derin karşılaştırmalar için Copilot CLI mı Claude Code mu? yazısına da göz atın.