티스토리 뷰

Go

command line argument 받기

LichKing 2019. 3. 23. 18:37

golang에서 커맨드라인 인자를 받는법을 소개하고자한다. os 패키지를 이용하는 방법과 flag 패키지를 이용하는 방법이 있다.


1. os package

os 패키지에 Args 슬라이스를 이용하면 된다.


func main() {
arguments := os.Args
fmt.Println(arguments)
}


참고로 디폴트로 항상 애플리케이션 명칭이 첫번째 인자로 넘어가므로 Args는 항상 최소 1임을 유의해야한다. 실제 인자를 보낼때도 0이 아니라 1 인덱스부터 사용해야한다.


go run exam1.go option1 option2


형태로 사용하면된다.


2. flag package

os 패키지보다 좀 더 고수준의 방식을 지원해준다. 난 인자를 받을일이 생기면 flag 패키지를 이용한다.


func main() {
age := flag.Int("age", 31, "your age")
name := flag.String("name", "LichKing", "your name")
flag.Parse()

fmt.Println(*age)
fmt.Println(*name)
}


어렵지 않은 코드다. 첫번째 인자는 옵션명, 두번째인자는 기본값, 세번째인자는 인자가 잘못 넘어왔을때 표현될 설명이다. 참고로 flag 패키지가 리턴하는 값은 포인터이므로 값을 출력하려면 역참조해서 값을 가져오도록 해야한다.


인자에 이름이 붙어있기때문에 순서를 외우지 않아도된다는 점이 참 편하다.


go run exam1.go -age=10 -name=yong


호출은 이런식으로 해주면 된다. =은 공백으로 대체 가능하다.


go run exam1.go -age 10 -name yong


기본값이 지정되어 있으므로 인자를 안넘겨도 문제없이 실행된다.


go run exam1.go


age 옵션에 문자열을 넘기면 숫자로 형변환을 하지못해 에러가 발생한다. 이때 세번째 인자로 넣은 설명이 노출된다.


go run exam1.go -age LichKing


-age int
your age (default 31)
-name string
your name (default "LichKing")


한가지 불편한점이 기본값을 지정해줘야한다는 점인데 안전한 프로그램을 위해 적절하게 지정해주도록 하자.

'Go' 카테고리의 다른 글

goroutine  (0) 2019.03.28
command line argument 받기  (0) 2019.03.23
array와 slice  (0) 2019.03.02
panic() 과 recover()  (0) 2019.03.01
defer 키워드  (0) 2019.03.01
댓글
댓글쓰기 폼