CodeBlanks Logo Icon CodeBlanks

os.Args

os.Args ile doğrudan argümanlara erişmeyi öğrenirsin.

os.Args

os.Args program başlatılırken verilen tüm argümanları ham olarak içeren bir []string'dir. os.Args[0] programın kendisidir:

// ./selam Ada Can
for i, a := range os.Args {
    fmt.Println(i, a)
}
// 0 ./selam
// 1 Ada
// 2 Can

Çok basit araçlarda flag paketine gerek kalmadan doğrudan kullanılabilir; ama dizin dışı erişimden kaçınmak için önce len(os.Args) kontrol edilmelidir.

Ortam değişkenleri ve stdin

Komut satırı aracının üç girdi kaynağı vardır: argümanlar (os.Args), ortam değişkenleri (os.Getenv, os.LookupEnv) ve standart girdi. İyi araçlar dosya adı verilmezse stdin'den okur; böylece borularla birleştirilebilir:

var r io.Reader = os.Stdin
if len(os.Args) > 1 {
    f, err := os.Open(os.Args[1])
    if err != nil { log.Fatal(err) }
    defer f.Close()
    r = f
}

cat log.txt | ./say ve ./say log.txt aynı sonucu verir.

Uygulama Argümanları selamla

selam(args []string) []string yaz: args[0] program adı olsun; uzunluk 2'den küçükse []string{"kullanım: selam AD..."}, değilse her ad için "Merhaba " + ad döndürsün. []string{"selam", "Ada", "Can"} ile çağırıp her satırı yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

func selam(args []string) []string {
    if len(args) < 2 {
        return []string{"kullanım: selam AD..."}
    }
    var out []string
    for _, ad := range args[1:] {
        out = append(out, "Merhaba "+ad)
    }
    return out
}

func main() {
    for _, s := range selam([]string{"selam", "Ada", "Can"}) {
        fmt.Println(s)
    }
}

Beklenen çıktı

Merhaba Ada
Merhaba Can

Soru ve cevaplar

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

1 Hiç argümansız çalıştırılan programda <code>os.Args[1]</code> okunursa ne olur?

  • Boş string döner
  • nil döner
  • Program adı döner
  • index out of range panic'i Doğru cevap

Açıklama: os.Args yalnızca [0]'ı içerir; olmayan dizine erişmek çalışma anında panic üretir.

2 Uzunluk kontrolü

Soru
if len(os.Args) ____ 2 {
    fmt.Println("kullanım: selam AD")
    return
}
Cevap
if len(os.Args) < 2 {
    fmt.Println("kullanım: selam AD")
    return
}

Açıklama: En az bir argüman gerekiyorsa uzunluk 2'den küçükse kullanım mesajı gösterilir.

3 Girdi kaynağı

Kavram Anlamı
os.Args Komut satırı
os.Getenv Ortam değişkeni
os.LookupEnv Tanımlı mı?
os.Stdin Boru / klavye

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