2017-10-10 3 views
1

GO 프로그램에서 CLI 프로그램을 작성 중이며 다소 긴 인수 목록을 주 함수에 전달할 수 있어야합니다. 현재 인수 (공백으로 구분 된 값)를 전달하는 표준 방법을 사용하고 은 os.Args [index]를 사용하여 검색합니다.GoLang CLI 프로그램 및 제한 사항에서 긴 인수를 전달하는 가장 좋은 방법

그래서 내 질문은 :

  1. 하나가 통과 할 수 인수의 수에 제한이 있습니까?
  2. 문자열 인수의 길이에 제한이 있습니까?
  3. 이것을 달성하는 다른 방법이 있습니까? 그렇다면 어떻게해야합니까?
+2

한계 값은 모두 운영 체제에 따라 다릅니다. argd를 파일, 표준 입력, 환경 변수 등을 통해 원하는 다른 방법으로 전달할 수 있습니다. – JimB

+0

패키지를 사용하여 명령 줄 인수를 관리하는 데 도움이 되었습니까? [urfave/cli] (https://github.com/urfave/cli)와 같은 패키지가 유용 할 수 있습니다. – doykle

+0

항목 3에 관해서는이 문제를 해결하는 또 다른 방법입니다 - yaml처럼 단순한 구성 파일을 사용하는 것이 좋습니다. 이 방법을 사용하면 설정 파일에 대한 경로 인 명령 줄 인수 하나만 전달하면됩니다. –

답변

3
  1. 아니요, 최대한 멀리하는 것이 좋습니다. 커맨드 라인 인수는 []string으로 파싱되므로,이 레벨에서는 사용 가능한 메모리 양만 문제가됩니다. 그러나 아래의 설명은 정확합니다. 귀하의 시스템은 당신이 먼저 부딪 칠 수있는 자신의 하한 한도를 가질 것입니다.
  2. 위와 동일합니다.
  3. 자신이 모든 실행에 대해 인수를 위해 t을 전달 찾을 경우가 많이 변경하지 않으면
    • , 그들은 당신의 국기에 대한 의미로 제정신 기본값을해야합니까?
    • 기본값으로 이해가되지 않는 경우 구성 파일에서 읽는 것이 좋습니다. CSV, YAML, 뭐든간에.

자세한 내용을 모른 채, 나는 설정 파일을 권 해드립니다. 그들은 다른 configs/run을 추적하기 쉽고, cmd 라인 args의 긴리스트보다 쉽게 ​​편집 할 수 있으며 cmd 라인의 args가 config의 값을 덮어 쓸 수 있도록 항상 작성할 수 있습니다.

command-lineconfiguration 섹션 아래에서 이미이를 수행하는 라이브러리에 대해 awesome-go을 확인하십시오.

+1

1 & 2가 반드시 사실 일 필요는 없습니다. 플랫폼과 쉘에 따라 다릅니다. 나머지는 자리에 있지만. – Adrian

+0

인수의 크기에는 항상 제한이 있어야합니다. ARG_MAX는 POSIX 시스템에서이를 정의하고 있으며, 현재 내 것이'262144 '입니다. – JimB

+0

예, Adrian과 JimB에게 감사드립니다. 내 대답에 설명을 추가했습니다. – theeddieh