Command Line Argument 사용

1. Command Line Argument 사용

Go 프로그램의 main() 함수는 C,C# 등의 다른 언어에서 갖고 있는 argument 파라미터를 갖지 않는다. 따라서, Command Line의 Argument를 얻기 위해서는 os.Args 를 사용해야 한다.

os.Args 는 다음과 같이 문자열 슬라이스로 정의되어 있는데, Args는 프로그램의 Command Line 정보를 프로그래명부터 순서대로 담고 있다.

1
var Args []string

프로그램이 2개의 argument를 가진다고 가정했을 때, os.Args[0:1]는 실행되는 Go 프로그램 이름을 가지며, os.Args[1:2]는 첫번째 argument를, os.Args[2:3]는 두번째 argument를 갖는다. 아래 예제는 프로그래명과 2개의 Command Line argument를 출력하는 샘플이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
 
import ("fmt""os")
 
func main() {
    if len(os.Args) < 2 {
        panic("에러: 2개 미만의 argument")
    }
     
    programName := os.Args[0:1]
    firstArg := os.Args[1:2]
    secondArg := os.Args[2:3]
    allArgs := os.Args[1:]
     
    fmt.Println(programName, firstArg, secondArg)
}

2. Command Line Flag 사용

위의 Command Line Args 기능에서 한발 나아가 Go는 흔히 사용되는 Command Line 옵션(예:-h, -input 등)을 파싱하는 기능을 제공한다. Command Line Flag라 불리우는 이 기능은 "flag" 표준패키지에서 제공한다.

flag는 문자열, 정수, 그리고 Boolean 3가지 데이타타입을 지원하는데, 각각 flag.String(), flag.Int(), flag.Bool() 같은 메서드를 사용하여 Command 옵션을 지정할 수 있다. Command 옵션을 지정하는 플래그 메서드는 플래그명, 디폴트값, 그리고 간단한 플래그 도움말 등을 받아들이는데, 예를 들어, flag.String(플래그명, 디폴트값, 플래그 설명) 과 같은 형태이다. 모든 옵션이 정의된 후, flag.Parse() 호출하는데, 이는 실제 Command Line 옵션들을 파싱해서 읽어들여 (포인터)변수에 저장하는 역활을 한다. 포인터 변수에 저장된 데이타는 Dereference하여 사용하면 된다. 아래 예제는 -file, -maxtrial, -root 라는 3가지 옵션 플래그를 읽고 그대로 출력해보는 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* test.go */
package main
 
import (
    "flag"
    "fmt"
)
 
func main() {
 
    file := flag.String("file", "default.txt", "Input file")
    trials := flag.Int("maxtrial", 10, "Max Trial Count")
    isroot := flag.Bool("root", false, "Run as root")
 
    flag.Parse()
 
    // 포인터 변수이므로 앞에 * 를 붙어 deference 해야
    fmt.Println(*file, *trials, *isroot)
}
 
/* 테스트
C> go build test.go
C> test -file=test.csv -maxtrial=5 -root=true
test.csv 5 true
*/

flag에 기본적으로 내장된 옵션으로 -h 혹은 --help 옵션이 있다. 즉, 사용자가 test --help 처럼 실행하면, 등록된 모든 플래그 옵션들을 플래그 도움말(플래그 정의시 개발자가 지정한 도움말)과 함께 화면에 출력해 준다.

1
2
3
4
5
6
7
8
C> test --help
Usage of test:
  -file string
        Input file (default "default.txt")
  -maxtrial int
        Max Trial Count (default 10)
  -root
        Run as root
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.