Go İle Dosya Yazma ve Okuma İşlemleri

Güncelleme Yayın

Go programlama dili öğrenme sürecinde ilk araştırdığım konulardan biri dosya işlemleri oldu. Aşağıda basit bir örnek iletiyorum. Go dilinin temel yapısına dair bir çok kaynak mevcut1.

package main

import (
 "bufio"
 "fmt"
 "io"
 "os"
)

func main() {
 // file name
 fileName := "newFile.txt"

 if _, err := os.Stat(fileName); os.IsNotExist(err) {
  // create a file
  _, err := os.Create(fileName)
  checkError(err)
  fmt.Println(fileName + " is created.")
 } else {
  // file exists
  fmt.Println(fileName + " exists.")
 }

 // For read access.
 fileData, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)
 checkError(err)

 fileStat, err := os.Stat(fileName)
 checkError(err)

 if fileStat.Size() == 0 {
  fmt.Println("It is fresh!")
 }

 reader := bufio.NewReader(os.Stdin)
 fmt.Print("\nText: ")

 content, _ := reader.ReadString('\n')

 ln, err := io.WriteString(fileData, content)
 checkError(err)
 fmt.Printf("%v character is included.", ln-1)

 fileData.Close()
}

func checkError(err error) {
 if err != nil {
  panic(err)
 }
}

Kod parçacığıyla ilgili detaylara değinmek gerekirse, bufio paketi2 ile kullanıcıdan alınan girdi işlenerek os3, io4 paketleri aracılığıyla işlenmekte. Dosya okuma işleminde ise io/ioutil paketini dahil ederek işlemlerimizi genişletebiliriz5. Yukarıda yer alan kodlar üzerinden sürece dair ilerlemeleri görüntüleyebilirsiniz.

İşlemler için oluşturulan/kullanılan dökümanımız newFile.txt. İlk olarak dosyanın varlığını kontrol edilmekte. Dosya oluşturulmamışsa os.IsNotExits oluşturma işlemi gerçekleştirilemekte. Ardından okuma işlemine geçilmekte ioutil.ReadFile ve dosya bilgileri edinilmekte os.Stat. Dosya boyutunun Size() belirtilmesinin ve içeriğinin dökülmesinin bufio.NewReader(), ReadString() ardından kullanıcı girdisinin dökümana yeni bir satır eklenmesi ile os.OpenFile(), io.WriteString(), Close() süreç sonlandırılır.