# Gemini CLI Go: Terminal Ajanıyla Go Projesi Geliştirme

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

Gemini CLI Go projelerinde gemini komutuyla nasıl kullanılır? GEMINI.md kurulumu, go test döngüsü, goroutine ve context denetimi için pratik ipuçları.

**Kısaca:**

- Gemini CLI, Go projesinde GEMINI.md ile build, test ve lint komutlarını bilerek modül sınırlarına uygun kod üretir.
- Go test çıktısını yorumlayıp table test ekleyebilir; ancak interface ve goroutine değişikliklerinde review şarttır.
- AgentVera ile birden fazla ajanı ayrı git worktree’lerde çalıştırıp otomatik review ve checkpoint’lerle riskleri yönetebilirsiniz.

Gemini CLI, Go projesinde terminalde `gemini` yazarak başlatılır ve proje kökündeki GEMINI.md dosyasından kuralları okur. Ajan, `go build`, `go test` ve `go vet` gibi standart araçları çalıştırıp çıktıyı yorumlayabildiği için Go’nun katı denetim döngüsüne kolayca uyum sağlar. Bu rehberde, [Gemini CLI](/ajanlar/gemini-cli/) ile gerçek bir Go servisinde verimli çalışmanın yöntemlerini anlatıyorum.

## Gemini CLI Go işlerinde neden iyi çalışır

Go ekosistemi, araçların metin tabanlı ve öngörülebilir olması nedeniyle terminal ajanları için elverişlidir. `go build` hata verdiğinde dosya ve satır numarası verir; `go test` başarısız testleri aynı biçimde raporlar; `gofmt -l` ise biçimlendirme sorunlarını sessizce listeler. Gemini CLI bu çıktıları okur, hatayı anlar ve düzeltme önerir. Modül sınırları net olduğu için ajan yeni bir dosyayı hangi package altına koyacağını ve hangi import’u ekleyeceğini genellikle doğru tahmin eder. Go’nun statik tip sistemi de ajanın ürettiği kodun derlenmeden önce tutarsız olmasını engeller; `interface` tanımları küçük ve sözleşme gibi olduğundan ajan mevcut yapıya uyum sağlar. Ayrıca `context.Context` parametresinin standart geçişi, ajanın uzun süren işlemleri iptal edilebilir biçimde yazmasını kolaylaştırır. Ancak asıl güç, ajanın yalnızca kod üretmekle kalmayıp ürettiği kodu `go test` ve `go vet` ile anında doğrulayabilmesidir.

## Projeyi ajan için hazırlamak: GEMINI.md

Gemini CLI, proje kökündeki GEMINI.md dosyasını talimat olarak okur. Go projesi için bu dosyayı kısa ve komut odaklı tutmak gerekir; uzun mimari anlatımları yerine ajanın her adımda uygulayabileceği somut kurallar yazılmalıdır. Aşağıdaki örnek, gerçek bir API servisinde işe yarayan asgari yapıyı gösterir.

```markdown
# GEMINI.md

Go modülü: github.com/sirket/api

## Komutlar
- Derle: go build ./...
- Test: go test ./...
- Lint: go vet ./... && gofmt -l .

## Dizin düzeni
- cmd/ -> main paketleri
- internal/ -> dışa kapalı iş mantığı
- internal/service -> servis katmanı
- internal/store -> veri erişimi

## Kurallar
- Her değişiklikten sonra gofmt ve go test çalıştır.
- go.mod ve go.sum dosyalarını elle düzenleme; bağımlılık için `go get` kullan.
- Uzun süren işlerde context.Context kullan ve iptali yay.
- Goroutine başlatırken hata ve panic yönetimini yaz; sync.WaitGroup veya errgroup kullan.
- Arayüzleri tüketen tarafta tanımla, küçük tut.
- Testleri table-driven yaz.
```

Bu dosya sayesinde ajan, her değişiklikten sonra `go test ./...` komutunu kendiliğinden çalıştırır, `gofmt` uygular ve yeni bir goroutine yazarken context’i atlamaz. Kurallara ek olarak hata yönetimi için `errors.Is` ve `errors.As` kullanmayı, `defer` ile kaynak kapatmayı ve asla `panic` ile normal akışı kesmemeyi de ekleyebilirsiniz. GEMINI.md’i değiştirdiğinizde ajanın yeni kuralları hemen kullanması için mevcut oturumu kapatıp yeniden başlatmak en temiz yoldur. Genel kullanım ipuçları için [Gemini CLI nasıl kullanılır? Adım adım rehber](/blog/gemini-cli-nasil-kullanilir/) yazısına göz atabilirsiniz.

## Çalışma döngüsü ve örnek promptlar

Go projesinde tek seferde büyük bir refactor istemek yerine küçük adımlarla ilerlemek daha güvenlidir. Ajan bir değişiklik yaptığında önce `git diff` ile neyi değiştirdiğine bakın, sonra `go test ./...` çalıştırın ve çıktıyı inceleyin. Ajanın önerdiği kod derlense bile testlerin kapsamadığı davranışları gözden geçirin. Bu döngü şöyle işler:

1. Kapsamı tek bir package veya fonksiyonla sınırlayın.
2. Prompt’ta mevcut davranışı ve beklenen davranışı açıkça yazın.
3. Ajan kodu değiştirsin, siz `git diff` ile inceleyin.
4. `go test ./...` ve `go vet ./...` çalıştırın.
5. Hata varsa çıktıyı yapıştırıp düzeltmesini isteyin.

Aşağıdaki promptlar tipik Go işleri için başlangıç noktasıdır:

- `internal/service/order.go` içindeki sipariş oluşturma fonksiyonuna context.Context desteği ekle; geçersiz durumda tanımlı hata döndür. Mevcut testleri table-driven olarak güncelle.
- `go test ./...` çıktısındaki başarısız testleri incele, kök nedeni bul ve düzelt. Test adlarını değiştirme.
- `internal/store` katmanındaki `UserStore` interface’ini kullanan mock’larla karşılaştır; gereksiz metot varsa interface’i küçült ve ilgili testleri güncelle.
- Şu fonksiyonu al: [kodu yapıştır]. Bunu bir goroutine içinde çalıştırırken context iptaline ve hata dönüşüne uygun hale getir; `errgroup.Group` kullan.
- Son üç commit’i incele; dışa açık API’de kırıcı değişiklik olup olmadığını listele ve gerekli uyum kodunu üret.

Bu promptlarda dosya yollarını ve fonksiyon adlarını açıkça vermek, ajanın yanlış yere dokunmasını engeller. Ayrıca "testleri table-driven olarak güncelle" gibi somut istekler, ajanın yalnızca kodun mutlu yolunu değil tüm durumları düşünmesini sağlar. Daha fazla prompt tekniği için [kodlama ajanları için prompt nasıl yazılır?](/blog/kodlama-ajanlari-icin-prompt-yazmak/) yazısına başvurabilirsiniz.

## Hangi Go işlerinde iyi, nerelerde dikkatli olmalı

Gemini CLI; sıradan CRUD servisleri, DTO dönüşümleri, test üretimi, hata sarmalama, basit refactor’ler ve `context.Context` ekleme gibi işlerde oldukça verimlidir. Özellikle table-driven test yazmayı ve mock güncellemeyi hızlı yapar. Ancak aşağıdaki alanlarda çıktıyı dikkatle incelemek gerekir:

- Goroutine ve kanal kullanımı: Ajan yarış koşulunu gözden kaçırabilir; `go test -race` çalıştırmak şarttır. Özellikle paylaşılan slice ve map’lerde kilit veya kanal kullanımını siz doğrulayın.
- Interface değişiklikleri: Bir interface’e metot eklemek tüm implementasyonları kırabilir; ajan bazen yalnızca tek paketteki kullanımları günceller. Bu yüzden interface değişikliklerinde repo genelinde `go build ./...` çalıştırın.
- go.mod ve go.sum: Bağımlılık ekleme veya sürüm yükseltme önerdiğinde değişikliği ayrı bir commit’te tutun ve `go mod tidy` çalıştırın. Ajan bazen modül gereksinimlerini yanlış yazabilir.
- Context iptali: Ajan context ekler ama iptal yayılımını atlayabilir; uzun süren döngülerde `select` ve `ctx.Done()` kontrolünü siz doğrulayın. Zaman aşımı için `context.WithTimeout` kullanımı da test edilmelidir.
- Üretilen kod: Protobuf veya mock üreten araçların çıktılarını elle düzenlemek yerine üreticiyi yeniden çalıştırmak daha güvenlidir; ajanın bu tür dosyaları değiştirmesine izin vermeyin.
- Hata sarmalama: Ajan bazen hataları `%w` yerine `%v` ile sarar ve `errors.Is` çalışmaz. Hata yönetiminde `fmt.Errorf` kullanımını kontrol edin.

Ajanın ürettiği kod çoğu zaman çalışır, ama Go’nun belirli inceliklerini gözden kaçırabilir. Bu yüzden her kritik değişiklikten sonra insan gözü şarttır.

## Go için test ve doğrulama

Ajanla çalışırken test ve doğrulamayı otomatikleştirmek, Go’nun standart araçlarıyla kolaydır. Her değişiklikten sonra şu sırayı izleyin:

| Araç | Ajan nasıl kullanmalı |
|---|---|
| `gofmt -l .` | Biçim farklarını listele; fark varsa dosyaları gofmt’e göre düzeltsin |
| `go vet ./...` | Yaygın hataları kontrol etsin; `fmt.Printf` format uyumsuzluğu gibi sorunları yakalasın |
| `go test ./...` | Tüm testleri çalıştırıp çıktıyı yorumlasın; başarısız testleri düzeltsin |
| `go test -race` | Goroutine ve paylaşılan veri değişikliklerinde zorunlu tutun |

Ajan test üretirken table-driven stili kullanır; ancak testlerin sınır durumlarını kapsadığından emin olun. Örneğin `nil` context, boş slice, iptal edilmiş context ve concurrent map erişimi senaryolarını prompt’ta açıkça isteyin. Ajanın eklediği testlerin gerçekten davranışı doğruladığını, yalnızca kodu taklit etmediğini görmek için testleri bir kez bilerek bozup tekrar çalıştırabilirsiniz. Ayrıca `go test -coverprofile=coverage.out` ile kapsama raporu alıp kritik package’larda eşik belirleyebilirsiniz; ajan eksik kapsamı gidermek için yeni testler üretebilir. Doğrulama sürecinde `go vet` çıktısındaki uyarıları ajanla birlikte incelemek, derleme sonrası sürprizleri azaltır.

## Tek Go projesinde birden fazla ajan: AgentVera

AgentVera, terminal ajanlarının gerçek komut satırlarını aynı pencerede çalıştıran bir masaüstü uygulamasıdır. Go projesinde birden fazla Gemini CLI oturumunu ayrı git worktree’lerde paralel başlatabilirsiniz; böylece aynı package dosyaları üzerine yazmazlar ve `go test` birbirini beklemeden ilerler. Bir ajanın turu bitince ikinci model kodu otomatik inceler; bulgular file:line ile gösterildiği için interface değişikliği veya goroutine hatası hızla yakalanır. Ayrıca her turun checkpoint’i alınır; riskli bir refactor tek tıkla geri alınabilir.

## Sonuç

Gemini CLI, Go projesinde GEMINI.md ile net kurallar verildiğinde güvenilir bir yardımcıdır. Küçük adımlarla çalışmak, her değişiklikten sonra gofmt, go vet ve go test çıktılarını incelemek ve özellikle goroutine ile interface değişikliklerinde ikinci bir göz kullanmak, ajanın üretkenliğini hatasız koda dönüştürür.

## Sık sorulanlar

**Gemini CLI Go projesinde nasıl başlatılır?** Proje klasöründe terminalde gemini yazmanız yeterlidir. Ajan, GEMINI.md dosyasını okur ve Go modülü içinde go build, go test gibi komutları çalıştırabilir.

**Gemini CLI Go testlerini çalıştırabilir mi?** Evet, go test ./... komutunu çalıştırıp çıktıyı yorumlayabilir ve başarısız testleri düzeltebilir. Table-driven test ekleme konusunda da etkilidir.

**GEMINI.md dosyasına Go projesi için neler yazılmalı?** Build, test ve lint komutları, dizin düzeni, gofmt ve go vet kuralı, goroutine ve context kullanımı, interface tercihleri gibi kısa talimatlar yazılmalıdır. Örnek dosya yukarıdaki bölümde verilmiştir.

**Gemini CLI Go’da goroutine ve context hatalarını yakalayabilir mi?** Potansiyel sorunları görebilir ancak veri yarışlarını doğrulamak için go test -race çalıştırılmalıdır. Ajanın context iptali ve hata yayılımını atlamadığını siz de kontrol etmelisiniz.

---

**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/
