Go 프로그래밍에서 명령줄 플래그 처리를 효율적으로 다루기 위해 flag
패키지를 사용할 수 있습니다. 이 포스트에서는 flag
패키지의 다양한 활용 방법을 살펴보겠습니다.
1. 기본적인 플래그 정의와 사용
flag
패키지를 이용하여 간단한 플래그를 정의하고 사용하는 방법은 다음과 같습니다:
package main
import (
"flag"
"fmt"
)
func main() {
wordPtr := flag.String("word", "hello", "a string")
numbPtr := flag.Int("numb", 42, "an int")
boolPtr := flag.Bool("fork", false, "a bool")
flag.Parse()
fmt.Println("word:", *wordPtr)
fmt.Println("numb:", *numbPtr)
fmt.Println("fork:", *boolPtr)
}
위 코드에서 flag.String
, flag.Int
, flag.Bool
함수를 사용하여 각각 문자열, 정수, 부울형 타입의 플래그를 정의했습니다. 각 플래그의 이름, 기본값, 그리고 설명을 함수에 넘겨주었습니다. 그리고 flag.Parse
를 호출하여 명령줄 인자를 파싱하고, 정의한 플래그 변수에 값을 설정했습니다.
2. 사용자 정의 플래그 타입
flag
패키지를 이용하여 사용자 정의한 타입을 가진 플래그를 다루는 경우에도 flag.Value
인터페이스를 구현하여 쉽게 처리할 수 있습니다.
예를 들어, 사용자 정의한 slice
타입을 가진 플래그를 다루는 예제를 살펴봅시다:
package main
import (
"flag"
"fmt"
"strings"
)
type sliceValue []string
func (s *sliceValue) String() string {
return fmt.Sprintf("%v", *s)
}
func (s *sliceValue) Set(value string) error {
*s = strings.Split(value, ",")
return nil
}
func main() {
var s sliceValue
flag.Var(&s, "slice", "input comma-separated list")
flag.Parse()
fmt.Println("slice:", s)
}
위 코드에서, sliceValue
구조체에 String
과 Set
메소드를 구현하여 flag.Value
인터페이스를 만족시켰습니다. 그리고 flag.Var
함수를 사용하여 사용자 정의한 타입을 가진 플래그를 정의했습니다.
3. 환경변수를 이용한 기본값 설정
flag
패키지를 이용하여 플래그의 기본값을 환경변수를 통해 설정하는 방법은 아래와 같이 가능합니다:
package main
import (
"flag"
"fmt"
"os"
)
func main() {
wordPtr := flag.String("word", os.Getenv("WORD_ENV"), "a string")
flag.Parse()
fmt.Println("word:", *wordPtr)
}
위의 코드에서 flag.String
함수의 기본값으로 os.Getenv
를 이용하여 환경변수 값을 사용하도록 설정했습니다.
flag
패키지를 사용하여 명령줄 플래그를 처리하는 여러 방법에 대해 살펴보았습니다. 예시 및 자세한 정보는 공식 Go 문서를 참고하시기 바랍니다.
이상으로 Flag 패키지를 사용한 명령줄 플래그 처리의 다양한 활용 방법에 대한 포스트를 마치도록 하겠습니다. 감사합니다.