# GitHub Copilot CLI ile Go projelerinde pratik rehber

Adres: https://agentvera.dev/blog/copilot-cli-ile-go/ · Yayın: 2026-11-01

Go projelerinde GitHub Copilot CLI ile modül yapısı, testler, goroutine ve context yönetimini öğrenin. Ajana net kurallar verin, test döngüsünü hızlandırın.

**Kısaca:**

- Go projelerinde GitHub Copilot CLI, go test ve go vet ile sıkı bir geri bildirim döngüsü kurarak test odaklı geliştirmeyi hızlandırır.
- Ajana .github/copilot-instructions.md içinde modül yapısı, hata yönetimi ve context kurallarını vermek, üretilen kodun projeye uyumunu artırır.
- Ajanı küçük adımlarla çalıştırıp her diffi gözden geçirmek, goroutine ve interface tuzaklarını erken yakalar.

Go projesinde terminalde `copilot` komutuyla başlattığınız [GitHub Copilot CLI](/ajanlar/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?](/blog/copilot-cli-nasil-kullanilir/) 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:

```markdown
# 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](/blog/claude-md-nasil-yazilir/) 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/order` paketindeki `Process` fonksiyonunu context iptali geldiğinde düzgün dönecek şekilde düzenle; değişiklikten sonra `go test ./internal/order` çalıştır.
- `UserRepository` interface’ini tanımla, PostgreSQL implementasyonunu `internal/store` altına ekle; testlerini tablo tabanlı yaz ve `go test ./...` ile doğrula.
- `worker` paketinde 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?](/blog/copilot-cli-mi-claude-code-mu/) yazısına da göz atın.

## Sık sorulanlar

**GitHub Copilot CLI Go projelerinde nasıl başlatılır?** Proje klasöründe terminalde copilot komutunu çalıştırın. Ajan mevcut Go modülünü algılar; ekstra bir yapılandırma gerekmez ama .github/copilot-instructions.md ile kurallar verebilirsiniz.

**GitHub Copilot CLI ile Go testleri otomatik çalıştırabilir miyim?** Evet, ajan go test komutunu çalıştırabilir. Sizden onay isteyebilir veya talimat dosyasında test komutunu tanımlarsanız her değişiklikten sonra testleri koşar.

**GitHub Copilot CLI Go’da goroutine ve context hatalarını yakalayabilir mi?** Ajan kodu incelerken goroutine sızıntısı veya context iptali gibi yaygın hataları fark edebilir. Yine de go vet ve go test -race ile doğrulama yapmanız önerilir.

**GitHub Copilot CLI için AGENTS.md mi yoksa .github/copilot-instructions.md mi kullanmalıyım?** Her ikisi de çalışır; GitHub Copilot CLI .github/copilot-instructions.md dosyasını okur, AGENTS.md de yaygın olarak desteklenir. Tek bir yerde kısa ve net Go kuralları tutmak yeterlidir.

---

**AgentVera hakkında.** AgentVera, Solviera Teknoloji tarafından geliştirilen macOS, Windows ve Linux masaüstü uygulamasıdır. 18 yapay zeka kodlama ajanını (Claude Code, Codex, Gemini CLI, Copilot, Cursor, Antigravity, opencode, Hermes, Qwen Code, Kimi Code, Kiro, Amp, Droid, Goose, Vibe, Crush, Aider, Cline) proje bazında, gerçek terminallerde ve kullanıcının kendi CLI kurulum ve girişleriyle yan yana çalıştırır. Ücretsiz planda sınırsız ajan vardır. İndir: https://agentvera.dev/indir/ · Fiyatlar: https://agentvera.dev/fiyatlar/
