Advanced Flag Patterns
Ilg'or flag naqshlari
flag.Bool bayroq (ha/yo'q) parametrlar uchun, flag.NewFlagSet esa git commit, git push kabi "kichik buyruqlar" (subcommand) uchun o'z flag to'plamini yaratish imkonini beradi.
package main
import (
"flag"
"fmt"
"os"
)
func main() {
os.Args = []string{"myapp", "add", "-name=Kitob", "-price=50000"}
addCmd := flag.NewFlagSet("add", flag.ExitOnError)
name := addCmd.String("name", "", "mahsulot nomi")
price := addCmd.Int("price", 0, "narxi")
switch os.Args[1] {
case "add":
addCmd.Parse(os.Args[2:])
fmt.Printf("qo'shildi: %s (%d)\n", *name, *price)
default:
fmt.Println("noma'lum buyruq")
}
}flag.NewFlagSet(nom, xatoBoshqaruvi) — alohida, mustaqil flag to'plamini yaratadi (asosiy flag.Parse()dan mustaqil). Bu — myapp add -name=X va myapp remove -id=5 kabi, har birining o'z flag'lari bo'lgan kichik buyruqlarni qo'llab-quvvatlashning standart usuli: os.Args[1]ga qarab qaysi FlagSet.Parse(os.Args[2:]) chaqirilishini switch bilan tanlaymiz.
>_ Exercise
"remove" kichik buyrug'ini qo'llab-quvvatlang.
- •removeCmd := flag.NewFlagSet("remove", flag.ExitOnError) yarating
- •unga "id" (int, standart 0) flag'ini qo'shing
- •os.Args[1] == "remove" bo'lsa, uni parse qilib "o'chirildi: <id>" chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
flag.NewFlagSet orqali git-uslubidagi kichik buyruqlar (subcommand), har biri o'z flag to'plami bilan, qo'llab-quvvatlanadi.
NEXT UP
Environment Variables
$ go run main.go
Kodingizni ishga tushiring