CodeBlanks Logo Icon CodeBlanks

os.Stdin ve os.Stdout

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

main.go
package main

import (
    "fmt"
    "io"
    "os"
    "strings"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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ışı

Soru
fmt.Fprintln(os.____, "dosya bulunamadı")
Cevap
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ış

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