[go] Flag 패키지를 사용한 다양한 명령줄 플래그 유형

개요

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 패키지는 다양한 유형의 기본값 설정 방법을 제공합니다.

참조