Go'da Dosya İşlemleri: Okuma, Yazma ve Hata Yönetimi
Go'da dosya işlemleri `os` ve `ioutil` paketleriyle basitleştirilmiş. Hata yönetimi Go'nun temel felsefesi olduğu için her işlemde kontrol etmek gerekir.
Basit bir dosya okuma işleminden başlayalım. `os.ReadFile()` fonksiyonu tüm dosyayı belleğe yükler:
1package main23import (4"fmt"5"os"6)78func main() {9data, err:= os.ReadFile("dosya.txt")10if err!= nil {11fmt.Println("Hata:", err)12return13}14fmt.Println(string(data))15}Beklenen çıktı: dosya.txt'nin içeriği yazdırılır.
Dosya yazma işlemi `os.WriteFile()` ile yapılır:
1package main23import (4"os"5)67func main() {8content:= []byte("Merhaba Go!\n")9err:= os.WriteFile("cikti.txt", content, 0644)10if err!= nil {11panic(err)12}13}Beklenen çıktı: cikti.txt dosyası oluşturulur ve "Merhaba Go!" yazılır.
Büyük dosyalarla çalışırken satır satır okumak daha verimli:
1package main23import (4"bufio"5"fmt"6"os"7)89func main() {10dosya, err:= os.Open("buyuk.txt")11if err!= nil {12fmt.Println("Dosya açılamadı:", err)13return14}15defer dosya.Close()1617scanner:= bufio.NewScanner(dosya)18for scanner.Scan() {19fmt.Println(scanner.Text())20}2122if err:= scanner.Err(); err!= nil {23fmt.Println("Tarama hatası:", err)24}25}Beklenen çıktı: dosyanın her satırı ayrı ayrı yazdırılır.
Ek yazma işlemi (append) için dosyayı flag'ler ile açmak gerekir:
1package main23import (4"os"5)67func main() {8dosya, err:= os.OpenFile("log.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)9if err!= nil {10panic(err)11}12defer dosya.Close()1314dosya.WriteString("Yeni log satırı\n")15}Hata yönetiminde `defer` ve `Close()` çifti kritik. Dosyayı açtıktan hemen sonra `defer dosya.Close()` yazın, böylece fonksiyon çıkışında otomatik kapatılır. Hata olmasa bile kapatılması garanti edilir.
`os.O_APPEND` var olan dosyaya ekler, `os.O_CREATE` yoksa oluşturur, `os.O_WRONLY` sadece yazma modunda açar. İzinler (0644) Unix formatında verilir.
Sık yapılan hata: dosyayı kapatmadan başka işlem yapmak veya hata kontrolü atlamak. Go'da `err!= nil` kontrolü ihmal edilmemelidir.
0 yorum