os.Stdin ve os.Stdout
- Go kursu
- Orta seviye
- Ders 37/80
- 4 dk
Standart giriş ve çıkış akışlarını öğrenirsin.
os.Stdin ve os.Stdout
Her süreç üç standart akışla başlar: os.Stdin (girdi), os.Stdout (normal çıktı) ve os.Stderr (hata ve tanılama). Hepsi *os.File'dır; yani Reader ve Writer'dır.
fmt.Fprintln(os.Stdout, "sonuç: 42")
fmt.Fprintln(os.Stderr, "uyarı: önbellek boş")Hataları stderr'e yazmak, ./app > cikti.txt yönlendirmesinde çıktının temiz kalmasını sağlar.
Çıkış kodu
Komut satırı araçları başarıyı çıkış koduyla bildirir: 0 başarı, diğerleri hata. os.Exit(1) hemen çıkar ve defer'leri çalıştırmaz. Bu yüzden yaygın desen, işi run() error fonksiyonuna koyup main'de yalnızca sonucu değerlendirmektir:
func main() {
if err := run(os.Stdin, os.Stdout); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}Uygulama run deseni
run(in io.Reader, out io.Writer) error yaz: girdinin tamamını io.ReadAll ile okusun ve büyük harfe çevirip out'a yazsın. main'de strings.NewReader("go") ve os.Stdout ile çağır.
Başlangıç kodu
package main
import (
"fmt"
"io"
"os"
"strings"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"io"
"os"
"strings"
)
func run(in io.Reader, out io.Writer) error {
b, err := io.ReadAll(in)
if err != nil {
return err
}
_, err = fmt.Fprintln(out, strings.ToUpper(string(b)))
return err
}
func main() {
if err := run(strings.NewReader("go"), os.Stdout); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}Beklenen çıktı
GO
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>./app | grep hata</code> komutunda grep hangi akışı görür?
- Yalnızca stdout Doğru cevap
- Yalnızca stderr
- İkisini de
- Hiçbirini
Açıklama: Boru (|) yalnızca stdout'u bağlar; stderr de aktarılsın isteniyorsa 2>&1 eklenir.
2 Hata akışı
fmt.Fprintln(os.____, "dosya bulunamadı")
fmt.Fprintln(os.Stderr, "dosya bulunamadı")
Açıklama: Hata mesajları os.Stderr'e yazılır; böylece normal çıktıdan ayrı kalır.
3 Akış ve kullanım
| Kavram | Anlamı |
|---|---|
os.Stdin |
Girdi |
os.Stdout |
Sonuç çıktısı |
os.Stderr |
Hata ve uyarı |
os.Exit(1) |
Hatalı çıkış |