Go’yu kullanarak bir metin dosyasına okumak ve yazmak ister misiniz? Go programlama dilinin işletim sistemi ve bufio paketleri, metin dosyalarıyla çalışmayı basitleştirir.

Go'da Metin Dosyalarıyla Çalışma Kılavuzu

Bir programlama dili olarak Go, metin (.txt) dosyaları gibi dosyalar oluşturma, okuma ve yazma dahil olmak üzere çok çeşitli yerleşik özelliklere sahiptir.

Dosyalar, modern dünyada günlük hayatımızın önemli bileşenleridir. Metin dosyaları, harici yazılım veya veritabanları kullanmadan yapılandırılmış, insan tarafından okunabilen verileri depolamak için kullanışlıdır.

Go’da metin dosyalarını değiştirmeye nasıl başlayabileceğinizi merak ediyorsanız, bu makale tam size göre.

Go’daki bufio Paketi

Go’nun standart kitaplığının bir parçası olan bufio paketi, arabelleğe alınmış giriş ve çıkış işlemleri için kullanılır, dolayısıyla adı. Bufio paketi, Go’nun standart paketlerinin çoğunun uygulanmasında yaygın olarak kullanılan io.Reader ve io.Writer arayüzleri üzerine kuruludur.

Bufio paketi, arabelleğe alma uygulayarak bir adım daha ileri giderek, onu metinsel verileri içeren IO işlemleri için kullanışlı hale getirir.

Bufio paketini programınızda kullanmak için diğer paketlerle birlikte içe aktarmalısınız.

import (

    “fmt”

    “bufio”

)

Go’yu kullanmaya başladığınızda muhtemelen bir programcı olarak ihtiyaç duyabileceğiniz her şeyi içerdiğini duymuşsunuzdur . İşletim sisteminizle doğrudan iletişim için platformdan bağımsız işlevler sağlayan os adlı bir paket bulunmaktadır.

İşletim sistemi ve bufio paketleri, metin dosyası işlemeyi inanılmaz derecede basit hale getirir.

İşletim sistemi paketinin işlevlerinin büyük çoğunluğu Unix benzeri olsa da, hepsi hata mesajlarını okumayı ve kod ayıklamayı kolaylaştıran Go hata işleme stilini kullanır.

Peki, Go’da metin içeren dosyaları nasıl değiştirirsiniz?

Bir Metin Dosyasından Veri Nasıl Okunur

Metin dosyalarından veri okumak için, os paketinin, okunacak dosyanın adını parametre olarak kabul eden Open() işlevini çağırmanız gerekir. Dosyayı almanın başka bir yöntemi de OpenFile() işlevini kullanmaktır.

Open() ve OpenFile() arasındaki en büyük fark bunların uygulanmasındadır. Open() bir dosyayı salt okunur modda açar ( O_RDONLY bayrağıyla), OpenFile() ise üç parametreyi kabul ederek daha fazla esneklik sağlar:

Dosya adı

Dosya açma modu: Geçerli dosya açma modları aşağıdaki tabloda gösterilmektedir.

bayrak Anlam

O_RDONLY Dosyayı salt okunur modda açar

O_WRONLY Dosyayı salt yazma modunda açar

O_RDWR Dosyayı okuma-yazma modunda açar

O_APPEND Yazarken dosyaya veri ekler

O_CREATE Hiçbiri yoksa yeni bir dosya oluşturur

O_EXCL O_CREATE ile birlikte, dosyanın yalnızca mevcut değilse oluşturulması gerektiğini belirtmek için kullanılır.

O_SYNC Senkronize G/Ç için dosyayı açar

O_TRUNC Mümkünse dosyayı açarken kısaltın

Dosya izinleri: Linux’ta dosya erişim kurallarını belirlemek için kullanılan dosya izin bitleriyle aynı, örneğin 0777 tüm kullanıcı türlerine okuma, yazma ve yürütme izinleri vermek.

Aşağıdaki kod, os.Open() ve bu durumda Go for döngüsünde çalışan Scan() kullanılarak Go’daki bir metin dosyasından verilerin nasıl okunacağını gösterir.

package main

import (

    “bufio”

    “fmt”

    “log”

    “os”

)

/**

    CONTENT OF THE “testfile.txt” file.

    lorem ipsum dolor sit amet

    LOREM IPSUM DOLOR SIT AMET

    Lorem ipsum dolor sit amet

    Lorem Ipsum Dolor Sit Amet

    lOREM iPSUM dOLOR sIT aMET

    LoReM IpSuM DoLoR SiT AmEt

*/

func main() {

    file, err := os.Open(“testfile.txt”)

    // another method using os.OpenFile()

    // file, err = os.OpenFile(“testfile.txt”, os.O_RDONLY, 0644)

    if err != nil {

        log.Fatal(err)

    }

    defer file.Close()

    fmt.Println(“File opened successfully. Now reading file contents line by line:”)

    // create scanner from the file to read text from

    scanner := bufio.NewScanner(file)

    // scan or read the bytes of text line by line

    for scanner.Scan() {

        fmt.Println(scanner.Text())

    }

    if err := scanner.Err(); err != nil {

        log.Fatal(err)

    }

}

Yukarıdaki kodu go run filename.go ile çalıştırdığınızda , aşağıda gösterilen çıktıyı üretir:

Go'da Metin Dosyalarıyla Çalışma Kılavuzu

Okuma işlemleri için Open() veya OpenFile() işlevinin yolunu değil de yalnızca dosya adını iletirseniz , Go dosyanın mevcut dizinde olduğunu varsayar ve bulamazsa bir hata döndürür. Geçerli dizinin dışındaki dosyalarla çalışmanız gerekiyorsa, dosya yolunu iletmelisiniz.

Bir Metin Dosyasına Veri Nasıl Yazılır

Bufio paketi, baytlarca veriyi depolayan ve bunları bir Flush() işlevi yardımıyla bir dosyaya yazan arabelleğe alınmış bir Writer arabirimi sağlar.

Bir sonraki örnek kod, bir dosyayı okumak için kullanılanın devamıdır. Bu örnekte, veriler O_WRONLY ve O_APPEND bayrakları kullanılarak mevcut testfile.txt dosyasına yazılır.

main() fonksiyonunun kapanış küme ayracından önce yukarıdaki programa aşağıdaki kod satırlarını ekleyin :

// write output data to file

file, err = os.OpenFile(“testfile.txt”, os.O_APPEND|os.O_WRONLY, 0644)

if err != nil {

    log.Fatal(err)

}

defer file.Close()

fmt.Println(“File opened successfully, Now preparing to write data to file…”)

// create buffered Writer object to write data to file

textWriter := bufio.NewWriter(file)

// write string to buffer before saving file.

_, err = textWriter.WriteString(“-This is a new text added to the file.”)

if err != nil {

    log.Fatal(err)

}

textWriter.Flush()

fmt.Println(“Data written to file successfully…”)

Tam programınızın çıktısı şöyle görünmelidir:

Go'da Metin Dosyalarıyla Çalışma Kılavuzu

Go’da Dosya İşleme Kolaydır

Go, yalnızca metin dosyalarıyla değil, çeşitli dosyalarla çalışmanıza olanak tanır. JSON ve CSV dahil olmak üzere dosyalardan farklı türde verilerle çalışmak için çok sayıda ek yerleşik kitaplık ve işlev vardır.

Duruma göre nasıl farklı davrandıklarını görmek için, OpenFile() ile kullanılabilen çeşitli bayrakları ve dosya izinlerini deneyebilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir