# Codex Go Projelerinde Nasıl Kullanılır: Pratik Rehber

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

Codex’i Go projelerinde kullanmak için AGENTS.md, çalışma döngüsü, test ve doğrulama pratikleri. Go test, gofmt ve go vet ile güvenli ajan kullanımı.

**Kısaca:**

- Codex, Go projesinde AGENTS.md ile yönlendirildiğinde go test, gofmt ve go vet döngüsünü etkili biçimde yürütür.
- Çalışma döngüsü küçük diff, test ve git diff incelemesi üzerine kurulmalıdır.
- Goroutine, context ve go.mod değişikliklerinde go test -race ve go vet ile doğrulama şarttır.

Codex, bir Go projesinde terminalde `codex` komutuyla başlar; bulunduğu klasördeki AGENTS.md dosyasını okur ve `go test`, `gofmt`, `go vet` gibi araçları doğal biçimde kullanır. Genel kurulum için [Codex](/ajanlar/codex/) sayfasına, Codex CLI’nın çalışma mantığı için [Codex CLI nasıl kullanılır? Adım adım rehber](/blog/codex-cli-nasil-kullanilir/) rehberine bakabilirsiniz. Bu yazıda kurulum tekrarına girmeden doğrudan Go’ya özgü pratikleri anlatacağım.

## Neden Codex Go işlerinde iyi çalışır

Go’nun en büyük avantajı araç zincirinin hızlı ve belirleyici olmasıdır. `go test ./...` çoğu projede saniyeler içinde döner; derleyici hataları dosya:satır biçiminde net çıktı verir. Codex bu çıktıyı okuyup küçük düzeltmeler yapabilir; aynı hatayı birkaç turda çözmesi gerekse bile her turda somut bir ilerleme gösterir. `gofmt` sayesinde biçim tartışması yaşanmaz; ajanın yazdığı kod standart formata girer, böylece diff yalnızca mantık değişikliklerini gösterir. Statik tipler ve açık hata döndürme, ajanın fonksiyon imzalarını kolayca takip etmesini sağlar; örneğin bir handler’ı değiştirirken request ve response tiplerini doğrudan kod içinden çıkarabilir. Tablo testleri yaygın olduğu için Codex yeni test vakalarını var olan tabloya ekleyebilir; bu, test ekleme işini neredeyse mekanik hale getirir. Küçük arayüzler de ajanın mock ve fake üretmesini kolaylaştırır; `io.Reader` gibi tek metotlu arayüzler zaten standart kütüphanede hazırdır. Ancak goroutine, `context.Context` ve `sync` kullanımı gibi Go’ya özgü riskli alanlarda ajanı serbest bırakmamak gerekir; bu alanlarda `go test -race` ve `go vet` sizin güvenlik ağınız olmalıdır.

## Projeyi ajana hazırlama: AGENTS.md

Codex her turda AGENTS.md dosyasını bağlam olarak alır; bu yüzden dosya, projenin komutlarını ve Go kurallarını kalıcı biçimde öğretmenin en etkili yoludur. [Bağlam mühendisliği: yapay zeka kodlama ajanları rehberi](/blog/baglam-muhendisligi/) rehberinde bağlamın nasıl yönetileceği ayrıntılı anlatılıyor. Go projesi için dosyada mutlaka şunlar bulunmalı: modül yolu, test/build/lint komutları, dizin düzeni, tablo testi kuralı, hata sarmalama ve context kullanımı. Ajanın `go.mod` ile oynamasını istemiyorsanız bunu da kurala bağlayın. Aşağıdaki örnek gerçek bir servis projesine göre kısaltılmıştır.

```markdown
# AGENTS.md

## Proje
- Modül: `github.com/sirket/api`
- Go sürümü: `go.mod` içindeki `go` satırına bak

## Komutlar
- Tüm testler: `go test ./...`
- Tek paket testi: `go test ./internal/order -run TestCreate -v`
- Biçimlendirme: `gofmt -w .`
- Statik analiz: `go vet ./...`
- Derleme: `go build ./...`

## Dizin düzeni
- `cmd/` uygulama girişleri
- `internal/` dışarı açılmayan paketler
- `pkg/` yeniden kullanılabilir kütüphaneler
- `testdata/` test verileri

## Kurallar
- Her değişiklikten sonra `go test ./...` çalıştır.
- Yeni testler tablo testi olmalı; adı `TestXxx` biçiminde olmalı.
- Hataları `fmt.Errorf("bağlam: %w", err)` ile sarmala.
- `context.Context` fonksiyonlara ilk parametre olarak geçir; goroutine başlatırken mutlaka context kullan.
- Yeni bağımlılık eklemeden önce gerekçeyi bir cümleyle yaz; standart kütüphaneyi tercih et.
- Arayüzleri kullanan tarafta tanımla; tek metotluk arayüzler dışında gereksiz soyutlama ekleme.
- `go:generate` satırı olan dosyaları elle değiştirme; üreten komutu öner.
```

Bu dosyadaki komutlar ajana deterministik bir geri bildirim döngüsü sağlar. `go test ./...` tüm paketlerin testini çalıştırır; `go vet ./...` ise format string hataları, kopyalanmış kilitler gibi statik sorunları yakalar. Ajan bu komutları kendi başına çalıştırabildiği için hatayı düzeltip yeniden deneyebilir. Özellikle `internal` dizini altındaki paketlerin dışarıdan import edilemeyeceğini bilmek, ajanın yanlış bağımlılık yönleri önermesini engeller. Dosya güncel değilse ajan yanlış komutları çalıştırabilir; her bağımlılık veya dizin değişikliğinde AGENTS.md’yi de güncelleyin. Build tag’leri olan dosyalarınız varsa (`_linux.go` gibi), ajana bu dosyaları değiştirmemesi gerektiğini açıkça yazın.

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

Codex ile Go’da en verimli döngü şudur: önce ajanın planını küçük bir diff olarak istemek, sonra testleri çalıştırmak, ardından `git diff` üzerinden değişiklikleri okumak. Büyük bir refactor’ü tek promptla istemeyin; ajanı paket veya dosya sınırında tutun. Her turda `go test ./...` ve `gofmt -l .` çıktısını isteyin; bu iki komut temizse diff’i incelemeye geçebilirsiniz. Ajanın plan önerisini önce yazılı olarak vermesini istemek, yanlış yöne giden değişiklikleri erkenden yakalamanızı sağlar. Aşağıdaki promptlar tipik görevler için başlangıç olabilir.

- `cmd/api` içindeki create handler’ını incele. Request doğrulaması eksikse `net/http` ile ekle; hata yanıtlarını JSON olarak döndür. Yeni testleri tablo testi olarak `handler_test.go` dosyasına ekle ve `go test ./cmd/api/...` çalıştır.
- `internal/order` paketindeki `ProcessOrders` fonksiyonunu context cancellation’a uygun hale getir. `select` ile `ctx.Done()` dinle, goroutine sızıntısı olmadığını gösteren bir test yaz.
- Şu `go vet ./...` çıktısını kullanarak sorunları düzelt: [çıktıyı yapıştır]. Sadece ilgili dosyaları değiştir, biçimlendirme yapma.
- `internal/cache` paketindeki `Get` fonksiyonu için benchmark yaz; `go test -bench=. -benchmem ./internal/cache` çalıştır ve allocation sayısını azaltacak somut bir değişiklik öner.
- AGENTS.md’deki komutları sırayla çalıştır; kırılan testleri tek tek düzelt. Her düzeltmeden sonra üç satırlık `git diff` özeti ver.

Ajan bir testi düzelttiğinde `git diff --stat` ile yalnızca hedeflenen dosyaların değiştiğini kontrol edin. `internal/` dışındaki paketlerde beklenmedik değişiklikler varsa ajanın planını tekrar isteyin. Döngüyü şöyle sürdürün: prompt ver, testleri ajan çalıştırsın, siz `git diff` inceleyin, sonra bir sonraki adımı verin. Bu ritim, hem ajanın bağlamını küçük tutar hem de Go projesinin değişmezlerini korur.

## İyi olduğu işler ve dikkat edilecek noktalar

Codex Go projelerinde en çok şu işlerde güvenilirdir: tablo testlerini genişletmek, `%w` ile hata sarmalama eklemek, context parametresini alt fonksiyonlara yaymak, küçük arayüzleri ayıklamak, `gofmt` ve `go vet` uyarılarını gidermek ve dokümantasyon yorumlarını güncellemek. Buna karşılık şu alanlarda mutlaka gözünüz üzerinde olsun: goroutine yaşam döngüsü, `sync.WaitGroup` ve `errgroup` kullanımı, data race ihtimali, `go.mod` ve `go.sum` değişiklikleri, build tag’leri ve `go:generate` dosyaları.

Özellikle goroutine ve context hataları sinsidir; ajan, `context.WithCancel` eklemeden `go func` başlatabilir veya `sync.WaitGroup` içinde `defer wg.Done()` eklemeyi unutabilir. Böyle bir değişikliği üretim koduna almak testlerde görünmeyen bir sızıntıya yol açar; bu yüzden `go test -race ./...` her PR öncesi zorunlu olmalıdır. Hata sarmalamada `%w` yerine `%v` kullanması, `errors.Is` ve `errors.As` tabanlı kontrolün sessizce bozulmasına neden olur; diff içinde `fmt.Errorf` çağrılarını arayın. Tablo testlerinde ajan bazen beklenen değeri gerçek sonuca eşitleyerek testi geçirebilir; assertion’ın değişip değişmediğini ayrıca inceleyin. Arayüz ayıklarken gereğinden fazla metotlu bir arayüz önerebilir; tüketici tarafta tek metotlu arayüz tanımlamasını kural olarak hatırlatın. Ayrıca `nil` pointer döndüren bir arayüz implementasyonu, interface değeri nil olmadığı için beklenmedik hatalara yol açabilir; bunu yakalayan bir test eklemek sağlıklıdır.

## Go projelerinde test ve doğrulama

Ajanın çıktısını kabul etmeden önce aşağıdaki tabloyu uygulayın. Codex testleri kendisi çalıştırabilir ama siz diff’i ve komut çıktılarını görmelisiniz. Özellikle `go test -race ./...` ve `go vet ./...` çıktılarını isteyin; bunlar Go’ya özgü hataları erken yakalar.

| Kontrol | Komut | Neden |
| --- | --- | --- |
| Biçimlendirme | `gofmt -l .` | Boş satır, girinti ve brace farklarını gösterir |
| Derleme | `go build ./...` | Tüm paketlerin derlendiğini doğrular |
| Statik analiz | `go vet ./...` | Yanlış `fmt` argümanı, kopyalanan kilit, erişilemeyen kod |
| Birim testler | `go test ./...` | Tablo testleri ve regresyonları çalıştırır |
| Yarış denetimi | `go test -race ./...` | Goroutine ve paylaşılan bellek hatalarını yakalar |
| Bağımlılık diff’i | `go mod tidy -diff` | Gereksiz `go.mod` ve `go.sum` değişikliklerini gösterir |

Tabloda verilen komutların çıktısını ajan size getirdiğinde, `go test -json` ile birleştirmek istemiyorsanız düz metin yeterlidir. Bir testin neden kırıldığını anlamak için ajana şu komutu çalıştırmasını söyleyin: `go test -run TestCreate -count=1 -v ./internal/order`. `-count=1` test önbelleğini devre dışı bırakır; özellikle ajanın ardışık düzeltmelerinde her seferinde aynı testin çalıştığından emin olursunuz. Gofmt denetimi en son `gofmt -w .` ile kapatılır; ajan bunu çalıştırdıktan sonra diff’i yeniden alın. Ayrıca `git diff --check` boşluk hatalarını, `go test -coverprofile=coverage.out` ise hangi paketlerin test kapsamının düşük kaldığını gösterir; coverage çıktısını ajana verip boşlukları kapatmasını isteyebilirsiniz.

## Birden çok ajan: AgentVera ile paralel Go çalışması

Birden fazla Codex oturumunu aynı Go deposunda koşmak istiyorsanız AgentVera iyi bir seçenektir; [AgentVera nasıl kullanılır: ilk proje, ajanlar ve ızgara](/blog/agentvera-nasil-kullanilir/) bağlantısındaki uygulama, gerçek CLI araçlarını yan yana terminal panellerinde çalıştırır. Go için en önemli avantajı, her ajanın kendi git worktree’sinde ilerleyebilmesidir; böylece `internal/` paketlerinde aynı anda yapılan değişiklikler birbirini ezmez. Ayrıca ajan bir turu bitirdiğinde ikinci modelin diff’i incelemesi, özellikle goroutine ve arayüz hatalarını file:line ile gösterir; checkpoint’ler sayesinde hatalı bir refactor tek tıkla geri alınabilir. Token bütçeleri de uzun test ve refactor döngülerinde ajanın kontrolden çıkmasını engeller.

## Kapanış

Codex, Go’da en çok, net bir AGENTS.md ve sıkı doğrulama döngüsüyle işe yarar. Ajanın her değişikliğini `gofmt`, `go vet`, `go test -race` ve `git diff` ile süzün; concurrency kokan yerleri mutlaka kendiniz okuyun. Özellikle goroutine, context ve hata sarmalama alanlarında test kapsamını yükseltmek, ajanın önerdiği kodu güvenle almanızı sağlar. Böylece hızlı bir asistan değil, güvenilir bir Go pair programmer’ı elde edersiniz.

## Sık sorulanlar

**Codex Go projesinde nasıl başlatılır?** Proje klasöründe terminal açıp codex komutunu çalıştırmanız yeterlidir. Codex, AGENTS.md dosyasını okur ve verdiğiniz göreve göre Go dosyalarını düzenleyip go test, gofmt ve go vet komutlarını kullanabilir.

**Codex AGENTS.md dosyasını gerçekten kullanıyor mu?** Evet, AGENTS.md her turda bağlam olarak eklenir. Bu dosyaya Go projesinin test, build ve lint komutlarını yazarsanız Codex bunlara uyar; dosya yoksa varsayılan davranışa döner.

**Codex Go’da goroutine ve context hatalarını yakalayabilir mi?** Kısmen. Codex context eklemeyi ve select ile ctx.Done dinlemeyi yazabilir ancak data race’leri görmek için go test -race ./... çalıştırmalısınız. Bu komutu prompt içinde açıkça istemek en güvenlisidir.

**Codex’in Go testlerini kendi başına çalıştırması güvenli midir?** Evet, go test ./... gibi komutları çalıştırabilir; ancak çıktıyı ve diff’i siz incelemelisiniz. Özellikle test assertion’larının değiştirilmediğinden emin olun.

---

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