GoLang의 독립 플래그 세트
플래그 패키지에 대한 Go 문서에는 독립 플래그 세트 정의를 허용한다고 명시되어 있습니다. 명령줄 인터페이스에서 하위 명령을 구현하기 위한 것입니다. 그러나 이 기능을 어떻게 구현하는지에 대한 의문이 생깁니다.
두 개의 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 객체를 유지하여 -silent가 -apply에 대해서만 작동하도록 하는 것입니다.
해결책은 하위 명령을 구별한 다음 적절한 FlagSet에서 Parse를 호출하는 것입니다. 수정된 코드:
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) } }
이 접근 방식을 사용하면 지정된 하위 명령을 기반으로 관련 FlagSet만 구문 분석되어 원하는 동작이 보장됩니다.
위 내용은 Go에서 하위 명령에 대한 독립 플래그 세트를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!