os.Args
- Go kursu
- Orta seviye
- Ders 75/80
- 4 dk
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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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ü
if len(os.Args) ____ 2 {
fmt.Println("kullanım: selam AD")
return
}
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 |