Go İle Dosya Yazma ve Okuma İşlemleri
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.