>백엔드 개발 >Golang >Go에서 하위 명령에 대해 독립적인 FlagSet을 올바르게 정의하고 구문 분석하는 방법은 무엇입니까?

Go에서 하위 명령에 대해 독립적인 FlagSet을 올바르게 정의하고 구문 분석하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-11 04:43:08479검색

How to Properly Define and Parse Independent FlagSets in Go for Subcommands?

GoLang에서 독립적인 FlagSet 정의

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.