Go İle Dosya Yazma ve Okuma İşlemleri

Güncelleme 26/09/2020 Yayın 02/04/2019

Go programlama dili öğrenme sürecinde ilk araştırdığım konulardan biri olan dosya işlemlerine dair aşağıda basit bir örnek iletiyorum. Go dilinin temel yapısına dair bir çok kaynak mevcut, bunlardan biri de elbette dilin kendi tur dökümanı (Türkçe) incelenebilir.

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 paketi ile kullanıcıdan alınan girdi işlenerek os, io paketleri aracılığıyla işlenmekte. Dosya okuma işleminde ise io/ioutil paketini dahil ederek işlemlerimizi genişletebiliriz. 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.