Go by Example: Command-Line Flags

Buyruq qatori bayroqlari buyruq qatori dasturlari uchun parametrlarni ko’rsatishning keng tarqalgan usulidir. Masalan, wc -lda -l buyruq qatori bayrog’idir.

package main

Go asosiy buyruq qatori bayroqlarini tahlil qilishni qo’llab-quvvatlaydigan flag paketini taqdim etadi. Biz ushbu paketdan misol buyruq qatori dasturimizni amalga oshirish uchun foydalanamiz.

import (
    "flag"
    "fmt"
)
func main() {

Asosiy bayroq e’lonlari string, butun son va boolean parametrlar uchun mavjud. Bu yerda biz "foo" standart qiymati va qisqacha tavsifga ega word string bayrog’ini e’lon qilamiz. Ushbu flag.String funksiyasi string ko’rsatkichini qaytaradi (string qiymatini emas); bu ko’rsatkichdan qanday foydalanishni quyida ko’ramiz.

    wordPtr := flag.String("word", "foo", "a string")

Bu word bayrog’iga o’xshash yondashuvdan foydalanib, numb va fork bayroqlarini e’lon qiladi.

    numbPtr := flag.Int("numb", 42, "an int")
    forkPtr := flag.Bool("fork", false, "a bool")

Shuningdek, dasturning boshqa joyida e’lon qilingan mavjud o’zgaruvchidan foydalanadigan parametrni e’lon qilish ham mumkin. E’tibor bering, bayroq e’lon qilish funksiyasiga ko’rsatkichni uzatishimiz kerak.

    var svar string
    flag.StringVar(&svar, "svar", "bar", "a string var")

Barcha bayroqlar e’lon qilingach, buyruq qatorini tahlil qilishni bajarish uchun flag.Parse()ni chaqiring.

    flag.Parse()

Bu yerda biz tahlil qilingan parametrlarni va oxiridagi pozitsion argumentlarni chiqaramiz. E’tibor bering, haqiqiy parametr qiymatlarini olish uchun ko’rsatkichlarni masalan *wordPtr ko’rinishida dereferensiya qilishimiz kerak.

    fmt.Println("word:", *wordPtr)
    fmt.Println("numb:", *numbPtr)
    fmt.Println("fork:", *forkPtr)
    fmt.Println("svar:", svar)
    fmt.Println("tail:", flag.Args())
}

Buyruq qatori bayroqlari dasturi bilan tajriba o’tkazish uchun, avval uni kompilyatsiya qilib, so’ngra hosil bo’lgan binar faylni to’g’ridan-to’g’ri ishga tushirish ma’qul.

$ go build command-line-flags.go

Qurilgan dasturni avval barcha bayroqlar uchun qiymatlar berib sinab ko’ring.

$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
word: opt
numb: 7
fork: true
svar: flag
tail: []

E’tibor bering, agar bayroqlarni tashlab ketsangiz, ular avtomatik ravishda o’zlarining standart qiymatlarini oladi.

$ ./command-line-flags -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []

Oxiridagi pozitsion argumentlarni istalgan bayroqlardan keyin berish mumkin.

$ ./command-line-flags -word=opt a1 a2 a3
word: opt
...
tail: [a1 a2 a3]

E’tibor bering, flag paketi barcha bayroqlar pozitsion argumentlardan oldin kelishini talab qiladi (aks holda bayroqlar pozitsion argumentlar sifatida talqin qilinadi).

$ ./command-line-flags -word=opt a1 a2 a3 -numb=7
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3 -numb=7]

Buyruq qatori dasturi uchun avtomatik hosil qilingan yordam matnini olish uchun -h yoki --help bayroqlaridan foydalaning.

$ ./command-line-flags -h
Usage of ./command-line-flags:
  -fork=false: a bool
  -numb=42: an int
  -svar="bar": a string var
  -word="foo": a string

Agar flag paketiga ko’rsatilmagan bayroqni bersangiz, dastur xato xabarini chop etadi va yordam matnini yana ko’rsatadi.

$ ./command-line-flags -wat
flag provided but not defined: -wat
Usage of ./command-line-flags:
...

Keyingi misol: .