일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
Tags
- ssh
- RUBY
- 방화벽체크
- sudo
- AWS
- VMware
- Chef
- Openswan
- 루비
- docker-compose
- VIM
- Linux
- golang
- QT
- 패키지
- DevOps
- VPN
- docker
- 리눅스
- ubuntu
- opsworks
- driver
- port
- ssh command
- window size
- 우분투
- docker container
- docker registry
- 도커
- 드라이버
- Today
- Total
구리의 창고
Golang - 인자(Argument, Parameter) 파싱하기 FlagSet 본문
소개
Golang에서는 기본으로 넘겨받은 인자를 파싱하는 패키지가 포함되어있다. 이 중 Command Line을 파싱하는 오픈소스는 굉장히 많이 있다. 주로 사용하는걸 하나 추천하면 urfave/cli가 있다. 하지만 Command Line이 아닌 사용자로부터 입력받아 문자열을 파싱하려면 약간의 꼼수가 필요하다. 이를 가능하게 해주는 것이 FlagSet이다.
Flag
FlagSet을 살펴보기 전에 기본 예제로 나와있는 Flag 사용법을 살짝 살펴보자.
package main
import (
"flag"
"fmt"
)
func main() {
foo := flag.String("foo", "foo", "a string")
flag.Parse()
fmt.Println("foo: ", *foo)
}
위 예제에서는 프로그램 실행 시 -foo, --foo가 설정되어 있으면 그 값을 foo 변수에 넣어준다.
FlagSet
Flag는 기본적으로 CommandLine과 동작하므로, 변수로 들고있는 문자열에는 사용 할 수 없다. 한 가지 예로, Slack 봇을 만드는데 사용자가 입력한 문자열을 파싱해야 한다고 생각해보자. 이 경우는 os.Args를 통해 동작하지 않는다. 다음 코드를 보자.
package main
import (
"flag"
"fmt"
"strings"
)
func main() {
text := "-foo foo bar"
params := strings.Split(text, " ")
f := flag.NewFlagSet("", flag.ContinueOnError)
foo := f.String("foo", "", "a string")
err := f.Parse(params)
if err != nil {
fmt.Printf("%+v\n", err)
}
fmt.Println("foo: ", *foo)
fmt.Println("args: ", f.Args())
}
사용자가 인자로 -foo foo bar를 입력한 경우이다. 하나의 FlagSet을 만들고 그 안에 Flag들을 설정해준다. Flag로 설정되지 않은 값들은 f.Args()로 알아 낼 수 있다.
'Golang' 카테고리의 다른 글
Golang - Google OAuth2 접속/인증 (Google Adsense) (0) | 2017.08.05 |
---|---|
Golang - http transport RoundTripper 사용 (0) | 2017.07.07 |
Comments