io.Writer
- Go kursu
- Orta seviye
- Ders 36/80
- 4 dk
Writer interface'ini ve Write metodunu öğrenirsin.
io.Writer
io.Writer Reader'ın karşılığıdır:
type Writer interface {
Write(p []byte) (n int, err error)
}os.Stdout, dosyalar, bytes.Buffer, http.ResponseWriter, hash'ler ve sıkıştırıcılar Writer'dır. fmt.Fprintf(w, ...) herhangi bir Writer'a biçimli yazar; bu sayede aynı fonksiyon ekrana, dosyaya veya HTTP yanıtına çıktı üretebilir.
io.MultiWriter ve kısa yazma
io.MultiWriter(a, b) her yazımı birden çok hedefe çoğaltır (ör. hem ekrana hem log dosyasına). Sözleşmeye göre Write tüm baytları yazmadıysa hata döndürmek zorundadır; bu yüzden yalnızca err'i kontrol etmek genellikle yeterlidir.
f, _ := os.Create("log.txt")
w := io.MultiWriter(os.Stdout, f)
fmt.Fprintln(w, "başladı") // iki yere de yazılırUygulama Test edilebilir çıktı
rapor(w io.Writer, adlar []string) yaz; her adı "- " + ad biçiminde ayrı satıra yazsın. Bir bytes.Buffer'a çağırıp buf.String()'i fmt.Print ile yazdır.
Başlangıç kodu
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"bytes"
"fmt"
"io"
)
func rapor(w io.Writer, adlar []string) {
for _, ad := range adlar {
fmt.Fprintln(w, "- "+ad)
}
}
func main() {
var buf bytes.Buffer
rapor(&buf, []string{"Ada", "Can"})
fmt.Print(buf.String())
}Beklenen çıktı
- Ada - Can
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir rapor fonksiyonunu test edilebilir yapmak için en iyi imza hangisidir?
- func rapor(dosya string)
- func rapor(w io.Writer, v Veri) error Doğru cevap
- func rapor(v Veri) // os.Stdout'a yazar
- func rapor() string
Açıklama: Writer alan fonksiyon testte bytes.Buffer ile çağrılıp çıktısı kontrol edilebilir; üretimde os.Stdout veya dosya verilir.
2 Writer'a yaz
func selam(w io.Writer, ad string) {
fmt.____(w, "Merhaba %s\n", ad)
}
func selam(w io.Writer, ad string) {
fmt.Fprintf(w, "Merhaba %s\n", ad)
}
Açıklama: Fprintf biçimli metni verilen io.Writer'a yazar.
3 Writer hedefi
| Kavram | Anlamı |
|---|---|
os.Stdout |
Ekran |
bytes.Buffer |
Bellek (test) |
http.ResponseWriter |
HTTP yanıtı |
io.MultiWriter |
Birden çok hedef |