GoDasturchi
Advanced Flag Patterns

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.

example.go
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.

Hints (0/3)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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.

example.go
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.

Hints (0/3)

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