Özet - io paketi
- Go kursu
- Orta seviye
- Ders 40/80
- 4 dk
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
package main
import (
"bytes"
"io"
"os"
"strings"
)
func main() {
// buraya yaz
}Örnek çözüm
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
w := bufio.NewWriter(os.Stdout)
fmt.Fprintln(w, "son satır")
w.____()
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 |