Bölüm 1: Canlı Yeniden Yükleme'ye Giriş

Canlı Yeniden Yükleme Nedir?

Canlı yeniden yükleme, geliştirme ortamınızın kodunuzdaki değişiklikleri izlemesini ve uygulamanızı otomatik olarak yeniden yüklemesini sağlayan bir özelliktir. Bir dosyayı kaydettiğinizde, canlı yeniden yükleme aracı değişikliği algılar, uygulamayı yeniden derler ve yeniden başlatır. Bu, her değişiklikten sonra sunucuyu durdurma, uygulamayı yeniden derleme ve tekrar başlatma gibi manuel işlemlerden sizi kurtarır.

Go Geliştirme için Canlı Yeniden Yükleme'nin Faydaları

Canlı yeniden yükleme, geliştirme sürecini önemli ölçüde hızlandırabilir. Kodlarını derlemeden önce çalışan Go geliştiricileri için canlı yeniden yükleme, anında geri bildirim ile geliştirme sürecini iyileştirmek anlamına gelir. Faydalar şunları içerir:

  1. Artan Üretkenlik: Geliştiriciler manuel olarak derleme yapmaları gerekmediği için kesintisiz bir şekilde çalışabilirler.
  2. Zaman Kazancı: Canlı yeniden yükleme, kod değişikliklerinin çalışan uygulamada yansımasını görmek için geçen süreyi azaltır.
  3. Hata Tespiti: Anında derlemeler ve yeniden başlatmalar, hataları daha hızlı tespit etmeyi sağlar.
  4. Düzgün İş Akışı: Geliştirme sürecine sorunsuz ve verimli bir şekilde entegre olur, iş akışını hızlandırır.

Bölüm 2: Air Nedir?

Air, Go uygulamaları için canlı yeniden yükleme yetenekleri sunmak üzere tasarlanmış bir komut satırı yardımcı programıdır. Kaynak kodunuzdaki değişiklikleri izler ve Go uygulamanızı otomatik olarak yeniden derler ve başlatır. Bu, özellik geliştirmeye daha fazla odaklanmanızı ve tekrarlayan görevlere daha az odaklanmanızı sağlar.

Özellikler

Air, modern bir Go geliştirme ortamı için uygun bir dizi özellik sunar:

  • Otomatik Derlemeler: Dosya değişikliklerini algılar ve derlemeleri tetikler.
  • Özelleştirilebilir Derleme Komutları: Projektip ihtiyaçlarınıza göre derleme komutlarını özelleştirmenize olanak tanır.
  • Dizin Hariç Tutma: İzlemesini istemediğiniz dizinleri belirtmenize olanak tanır.
  • Yeni Dizin Desteği: Air başladıktan sonra eklenen yeni dizinleri izleyebilir.
  • Renkli ve Okunabilir Günlükler: Çıktı günlüklerinin okunabilirliğini renkli kodlama ile artırır.
  • CLI Argümanları: Hızlı ayarlamalar için yapılandırma alanlarına doğrudan komut satırı argümanları ile ayar yapılabilir.

Tüm özellikler ve işlevsellikler için geliştiricinin sağladığı bağlama başvurun.

Bölüm 3: air'in Kurulumu

3.1 go install Kullanarak Kurulum

Go 1.18 veya daha yeni sürümünü kullanarak Air'i kurmak için:

go install github.com/cosmtrek/air@latest

Bu, air'ın GOPATH/bin'inize kurulmasını sağlar.

3.2 install.sh Betiği Kullanarak Kurulum

Başka bir yöntem ise sağlanan kurulum betiği ile:

curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin

Kurulumdan sonra aşağıdaki komutu çalıştırarak doğrulayın:

air -v

3.3 Özel Kurulumlar (Docker/Podman ve Özel YOL)

Docker veya Podman kullananlar için, Air'i dahil etmenin pratik bir yolu bulunmaktadır:

docker run -it --rm \
    -w "/proje/yoluna" \
    -v $(pwd):/proje/yoluna \
    -p port:port \
    cosmtrek/air

/proje/yoluna kısmını projenizin yolunun ve port:port kısmını istediğiniz port eşlemesiyle değiştirin.

Alternatif olarak, belirli bir YOL kurulumu için:

curl -sSfL https://goblin.run/github.com/cosmtrek/air | PREFIX=/ozel/yol sh

Bölüm 4: air'i Go Projeniz için Yapılandırma

4.1 .air.toml Yapılandırmasını Anlamak

.air.toml, Air için yapılandırma dosyasıdır. Bu dosya, derleme süreci, dizin izleme ve günlük çıktısı ile ilgili ayarları belirtmenize olanak tanır. İşte ana bölümlerin kısa bir genel bakışı:

  • root: Air için çalışma dizetini belirtir.
  • build: Derleme ile ilgili ayarları içerir, örneğin derlemeden önce/sonra çalıştırılacak komutları ve ana derleme komutunu.
  • tmp_dir: Geçici derleme dosyalarının depolanacağı dizini belirtir.
  • log: Günlük dosyası ayarlarını yapılandırır.
  • color: Günlük çıktısının her bölümünün rengini özelleştirir.

4.2 Yapılandırma Dosyası Oluşturma ve Düzenleme

Varsayılan bir .air.toml yapılandırma dosyası oluşturmak için şunu çalıştırın:

air init

Bu, mevcut dizininize varsayılan ayarlarla bir .air.toml dosyası oluşturacaktır. Daha sonra projenizin gereksinimlerine uyacak şekilde düzenleyebilirsiniz. Referans için, bağlamda sağlanan air_example.toml dosyasına bakabilirsiniz.

4.3 CLI Argümanları ile Yapılandırmayı Geçersiz Kılma

Hızlı testler veya küçük değişiklikler için, .air.tomldaki yapılandırmayı geçersiz kılmak için CLI argümanları geçirebilirsiniz. Örneğin:

air --build.cmd "go build -o myapp" --build.bin "./myapp"

Bu esneklik, yapılandırma dosyasını değiştirmeden Air'ın davranışını kolayca özelleştirmenize olanak tanır.

Bölüm 5: Geliştirme Ortamınızda air'ı Çalıştırma

6.1 Projede air'ın Başlatılması

Projede air'a başlamak için, terminalinizde projenizin kök dizinine git ve air komutunu çalıştır. Eğer bir .air.toml yapılandırma dosyası mevcutsa, air otomatik olarak onu kullanacaktır. Aksi takdirde, varsayılan ayarları kullanacaktır.

cd /proje_yolunuz
air

İpucu: air yürütülebilir dosyasında izin sorunlarıyla karşılaşırsanız, gereken yürütme izinlerine sahip olduğundan emin olun (chmod +x $(go env GOPATH)/bin/air).

6.2 air ile Derleme ve Çalıştırma Komutlarını Özelleştirme

air tarafından kullanılan derleme ve çalıştırma komutlarını .air.toml yapılandırma dosyasında [build] bölümü altında değiştirerek özelleştirebilirsiniz. Örneğin, derleme komutunu değiştirip farklı bir ikili dosya belirlemek için:

[build]
cmd = "go build -o ./tmp/my-custom-binary ."
bin = "tmp/my-custom-binary"

Daha karmaşık derleme gereksinimleri için, yapılandırma dosyasındaki pre_cmd ve post_cmd dizileri derleme sürecinden önce ve sonra komutları çalıştırmanıza olanak tanır.

İpucu: air yapılandırmasının tam örneği

6.3 Dizinleri Hariç Tutma ve Değişiklikleri İzleme

air ayrıca, yeniden derlemeyi tetiklemeye gerek olmayan varlık veya bağımlılıklar içeren dizinleri izlemekten hariç tutmanıza olanak tanır.

Bunun için, .air.tomldaki exclude_dir alanını güncelleyin:

[build]
exclude_dir = ["assets", "tmp", "vendor", "node_modules"]

include_dir kullanarak ek dizinler eklemeyi veya include_ext ile belirli dosya uzantılarını izlemeyi de sağlayabilirsiniz.

Bölüm 6: Gelişmiş Kullanım

6.1 Docker Konteynerleri ile air Kurma

air'ı bir Docker konteyneri içinde kullanmak, özellikle ekip çalışmalarıyla uğraşırken geliştirme ortamınızı kolaylaştırabilir. Docker ortamınıza air'ı dahil etmek için, Dockerfile'ınızı güncelleyerek air'ı kurun ve .air.toml dosyanızı konteynere kopyalayın:

FROM golang:1.18-alpine AS builder

RUN go install github.com/cosmtrek/air@latest

WORKDIR /app

COPY go.mod .
COPY go.sum .
RUN go mod download

COPY . .

CMD ["air", "-c", ".air.toml"]

6.3 Docker-compose Ortamında air Kullanma

docker-compose tarafından yönetilen bir servise air'ı entegre etmek için, docker-compose.yaml dosyanızda bir servis tanımlayın:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "808:808"
    volumes:
      - .:/app
    command: ["air", "-c", ".air.toml"]

volumes direktifinin, air'ın dosya değişikliklerini algılayabilmesi için projenizin dizinini doğru şekilde konteyner içindeki çalışma dizinine eşlemesi gerektiğinden emin olun.

Bölüm 7: Genel Sorun Giderme ve Sık Sorulan Sorular

7.1 command not found: air Hatasını Düzeltme

Eğer command not found: air hatasıyla karşılaşırsanız, genellikle air ikilisinin sisteminizde PATH içinde olmadığı anlamına gelir. Bunu çözmek için, Go ikilileri yolunu PATH ortam değişkeninize ekleyin:

export PATH=$PATH:$(go env GOPATH)/bin
`

### 7.2 WSL Ortamlarındaki Sorunlar

Windows Alt Sistemi Linux (WSL) ortamında, `.air.toml` dosyanızdaki özel karakterleri kaçırmayı unutmayın. Örneğin, dosya yollarındaki ters eğik çizgileri kaçırmak için `\\` kullanın.

### 7.3 Binlerin Çalıştırılmadan Sıcak Derleme İpuçları

Eğer `air`'in Go uygulamanızı çalıştırmadan derlemesini istiyorsanız, `.air.toml` dosyanızın `[build]` bölümünde `cmd`'yi (Unix tabanlı sistemlerdeki gibi) işlem yapmayan bir komuta (`/bin/true` gibi) ayarlayın:

```toml
[build]
cmd = "/bin/true"

Bunu yaparak, air hala dosya değişikliklerini gözlemleyecek ve derleme sürecini tetikleyecek ancak sonuçta oluşan ikili dosyayı çalıştırmayı denemeyecektir.