Go'da Çalışma Dizini Sorunu: Dosyalar Nerede Aranacak?
Go'da sıkça karşılaşılan bir sorun: uygulamanızı derledikten sonra farklı bir çalışma dizininden çalıştırdığınızde dosya bulunamıyor hatası alırsınız.
Senaryoyu anlaşılır kılmak için: `my-online-store` projeniz içinde `server` adlı derlenmiş dosya var, yanında da `assets/about.jpeg` gibi dosyalar bulunuyor. `/home/john/my-online-store` dizininden `./server` çalıştırdığınızda sorun yok, çalışma dizini doğru. Ama `/` dizininden `/home/john/my-online-store/server` çalıştırırsanız, Go kodunuz `assets/about.jpeg`'i `/assets/about.jpeg`'de arayacak ve bulamayacak.
Bu sadece endişelenecek bir şey değil; göz ardı edilmemesi gereken bir tasarım sorunudur. Üretim ortamında sunucunuzu hangi dizinden çalıştıracağını bilemezsiniz. Çözümler:
1. Mutlak yol kullanın: Çalıştırılabilir dosyanın konumunu `os.Executable()` ile bulun, oradan göreceli yolları hesaplayın.
2. Ortam değişkeni: Uygulama başladığında veri dizinini belirten bir ortam değişkeni (`APP_HOME` gibi) okuyun.
3. Dosyaları gömün: `embed` paketi ile statik dosyaları binary'ye dahil edin, en güvenilir yöntem.
4. Konfigürasyon dosyası: Başlangıçta veri dizinini belirten bir config dosyası yükleyin.
Go'da dosya yönetimi yapılırken her zaman mutlak yollarla çalışmak veya çalışma dizinini kontrol etmek gerekir. Özellikle web sunucusu gibi uygulamalar için gömülü dosyalar veya açık yol tanımı neredeyse zorunludur.
0 yorum