Go İle Dosya Yazma ve Okuma İşlemleri

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 bloğuyla ilgili detaylara değinmek gerekirse, bufio paketi ile kullanıcıdan alınan girdi işlenerek os, io paketleri aracılığıyla işlenmekte.

package main
 
import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"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 := ioutil.ReadFile(fileName)
	checkError(err)
 
	fileStat, err := os.Stat(fileName)
	checkError(err)
 
	if fileStat.Size() == 0 {
		fmt.Println("It is fresh!")
	} else {
		fmt.Println(fileName + " content is: " + string(fileData))
		fmt.Printf(fileName+" size: %d", fileStat.Size())
	}
 
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("\nText: ")
 
	content, _ := reader.ReadString('\n')
 
	file, err := os.OpenFile(fileName, os.O_WRONLY|os.O_APPEND, 0666)
	ln, err := io.WriteString(file, content)
	checkError(err)
	fmt.Printf("%v character is included.", ln-1)
 
	file.Close()
}
 
func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

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.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir