Go 문서에 따르면 FlagSet 유형을 사용하면 명령에서 하위 명령을 구현하는 데 유용한 독립적인 플래그 집합을 생성할 수 있다고 나와 있습니다. 라인 인터페이스. 그러나 이 기능을 구현하는 것은 어려울 수 있습니다.
두 개의 FlagSet를 정의할 때 명령줄에 두 번째 FlagSet용 플래그가 포함되어 있으면 그 중 하나를 구문 분석하면 오류나 경고가 발생할 수 있습니다. 예를 들어 다음 코드를 고려해보세요.
f1 := flag.NewFlagSet("f1", flag.ContinueOnError) apply := f1.Bool("apply", false, "") silent := f1.Bool("silent", false, "") if err := f1.Parse(os.Args[1:]); err == nil { fmt.Println(*apply, *silent) } f2 := flag.NewFlagSet("f2", flag.ContinueOnError) reset := f2.Bool("reset", false, "") if err := f2.Parse(os.Args[1:]); err == nil { fmt.Println(*reset) }
cmd -apply 또는 cmd -reset을 실행하면 다양한 경고가 생성됩니다. 이 동작은 하위 명령 간의 구별이 부족하기 때문에 발생합니다. 이러한 FlagSet를 효과적으로 분리하려면 먼저 하위 명령을 구별한 다음 올바른 FlagSet을 구문 분석해야 합니다.
이를 달성하는 방법의 예:
f1 := flag.NewFlagSet("f1", flag.ContinueOnError) silent := f1.Bool("silent", false, "") f2 := flag.NewFlagSet("f2", flag.ContinueOnError) loud := f2.Bool("loud", false, "") switch os.Args[1] { case "apply": if err := f1.Parse(os.Args[2:]); err == nil { fmt.Println("apply", *silent) } case "reset": if err := f2.Parse(os.Args[2:]); err == nil { fmt.Println("reset", *loud) } }
이 코드는 -silent를 허용합니다. Apply 하위 명령과 함께 사용할 플래그 및 Reset 하위 명령과 함께 사용할 -loud 플래그입니다.
위 내용은 Go에서 하위 명령에 대해 독립적인 FlagSet을 올바르게 정의하고 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!