CodeBlanks Logo Icon CodeBlanks

Özet - io paketi

Reader ve Writer'ı birleştirerek bir dosya kopyalayıcı yazarsın.

io paketi özeti

Go'da G/Ç iki küçük arayüz üzerine kuruludur: io.Reader ve io.Writer. Bunları kabul eden fonksiyonlar dosya, ağ, bellek ve HTTP ile aynı şekilde çalışır ve test edilmesi kolaydır. Araç kutun: io.ReadAll, io.Copy, io.LimitReader, io.TeeReader, io.MultiWriter, bufio.Scanner, bufio.Writer.

Kural: büyük veri için tümünü okuma, akıt.

Kendi Reader'ın

Arayüzü uygulamak kolaydır. Her harfi büyüten bir Reader sarmalayıcısı:

type buyukReader struct{ r io.Reader }

func (b buyukReader) Read(p []byte) (int, error) {
    n, err := b.r.Read(p)
    copy(p, bytes.ToUpper(p[:n]))
    return n, err
}

Bu sarmalayıcı io.Copy, bufio.Scanner ve diğer tüm araçlarla doğrudan kullanılabilir.

Uygulama Sarmalayıcı Reader

Yukarıdaki buyukReader'ı yaz ve io.Copy(os.Stdout, buyukReader{strings.NewReader("gopher\n")}) ile çalıştır.

Başlangıç kodu

main.go
package main

import (
    "bytes"
    "io"
    "os"
    "strings"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "bytes"
    "io"
    "os"
    "strings"
)

type buyukReader struct{ r io.Reader }

func (b buyukReader) Read(p []byte) (int, error) {
    n, err := b.r.Read(p)
    copy(p, bytes.ToUpper(p[:n]))
    return n, err
}

func main() {
    io.Copy(os.Stdout, buyukReader{strings.NewReader("gopher\n")})
}

Beklenen çıktı

GOPHER

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>bufio.NewWriter</code> kullanıp <code>Flush</code> çağırmazsan ne olur?

  • Hiçbir etkisi olmaz
  • Tamponda kalan son veri hiç yazılmaz Doğru cevap
  • Program çöker
  • Veri iki kez yazılır

Açıklama: bufio.Writer veriyi 4 KB dolana kadar bellekte tutar; Flush kalan baytları alttaki Writer'a gönderir.

2 Tamponu boşalt

Soru
w := bufio.NewWriter(os.Stdout)
fmt.Fprintln(w, "son satır")
w.____()
Cevap
w := bufio.NewWriter(os.Stdout)
fmt.Fprintln(w, "son satır")
w.Flush()

Açıklama: Flush tamponda bekleyen baytları alttaki Writer'a yazar.

3 Grubun özeti

Kavram Anlamı
io.Reader Read(p []byte)
io.Writer Write(p []byte)
bufio.Scanner Satır satır okuma
io.Copy Akışla aktarma

Orta seviye bölümündeki tüm dersler