개요
Flag 패키지를 사용하면 Go 언어로 작성한 명령줄 프로그램에 쉽게 플래그를 추가할 수 있습니다. 플래그를 사용하여 프로그램을 시작할 때 사용자에게 설정을 입력하도록 하거나, 특정 동작을 지정하도록 할 수 있습니다.
이 포스트에서는 Flag 패키지를 사용하는 방법과 다양한 플래그 유형에 대해 설명하겠습니다.
단일 값 플래그
단일 값 플래그는 하나의 값을 입력받는 플래그입니다. 예를 들어, -name
플래그를 사용하여 사용자의 이름을 입력받는 프로그램을 작성할 수 있습니다.
다음은 단일 값 플래그를 정의하는 예제입니다.
import "flag"
func main() {
var name string
flag.StringVar(&name, "name", "Guest", "사용자 이름")
flag.Parse()
fmt.Println("안녕하세요, ", name)
}
위 예제에서 name
변수에 -name
플래그의 값을 할당하고, 만약 사용자가 실행 시에 이름을 제공하지 않으면 기본값으로 “Guest”가 사용됩니다.
복수 값 플래그
복수 값 플래그는 여러 값을 입력받을 수 있는 플래그입니다. 예를 들어, -fruits
플래그를 사용하여 여러 종류의 과일을 입력받는 프로그램을 작성할 수 있습니다.
다음은 복수 값 플래그를 정의하는 예제입니다.
import "flag"
func main() {
var fruits []string
flag.StringSliceVar(&fruits, "fruits", []string{"apple", "banana"}, "여러 종류의 과일")
flag.Parse()
for _, fruit := range fruits {
fmt.Println("과일: ", fruit)
}
}
위 예제에서 fruits
변수에 -fruits
플래그의 값을 할당하고, 만약 사용자가 실행 시에 과일을 제공하지 않으면 기본값으로 “apple”과 “banana”가 사용됩니다.
환경 변수와 플래그 결합
환경 변수와 플래그를 결합하여 더 유연한 설정 옵션을 제공할 수 있습니다. 이를 통해 사용자는 플래그를 직접 지정할 수도 있고, 환경 변수를 통해 설정을 제어할 수도 있습니다.
다음은 환경 변수와 플래그를 결합하여 사용하는 예제입니다.
import "flag"
func main() {
var name string
flag.StringVar(&name, "name", "Guest", "사용자 이름")
flag.Parse()
// 만약 환경 변수가 설정되어 있으면 그 값을 사용
envName := os.Getenv("GUEST_NAME")
if envName != "" {
name = envName
}
fmt.Println("안녕하세요, ", name)
}
위 예제에서는 -name
플래그를 통해 사용자 이름을 입력받고, GUEST_NAME
환경 변수를 통해 설정된 값이 있다면 그 값을 사용합니다.
플래그 값 기본값 설정
플래그에 기본값을 설정할 수 있어 사용자가 명시적으로 값을 입력하지 않았을 때의 기본 동작을 정의할 수 있습니다. 이를 통해 사용자 경험을 개선하고, 프로그램의 예상 동작을 설정할 수 있습니다.
위 예제들에서 이미 기본값을 설정하는 방법을 보았으나, Flag 패키지는 다양한 유형의 기본값 설정 방법을 제공합니다.
참조
- Go 언어 공식 문서: https://golang.org/pkg/flag/
- “The Go Programming Language” (Alan A. A. Donovan, Brian W. Kernighan)