[go] Flag 패키지의 유연한 명령줄 플래그 처리 방법

Golang에서 flag 패키지는 명령줄 플래그를 처리하는 강력하고 유연한 방법을 제공합니다. 이 패키지는 CLI(Command Line Interface) 애플리케이션 작성 시 명령줄 인수를 손쉽게 처리할 수 있도록 해줍니다.

플래그 정의하기

flag 패키지를 사용하여 명령줄 플래그를 정의하려면, 다음과 같은 방법을 사용합니다.

import "flag"

func main() {
    var name = flag.String("name", "Guest", "사용자의 이름")
    var age = flag.Int("age", 18, "사용자의 나이")
    flag.Parse()
    fmt.Println("이름:", *name, "나이:", *age)
}

flag 패키지를 사용하여 nameage라는 두 개의 플래그를 정의했습니다. 각 플래그는 자신의 이름, 기본값 및 설명을 가지고 있습니다.

플래그 사용하기

애플리케이션을 실행할 때 플래그를 사용하는 방법은 다음과 같습니다.

go run main.go -name=John -age=30

이렇게 하면 name 플래그가 “John”으로, age 플래그가 30으로 설정되어 실행됩니다.

유연한 플래그 처리

flag 패키지는 기본 타입 외에도 커스텀 타입을 정의하여 플래그를 처리할 수 있는 기능을 제공합니다. 또한 여러 개의 플래그 값을 한꺼번에 처리할 수도 있습니다.

type person struct {
    Name string
    Age  int
}

func (p *person) String() string {
    return fmt.Sprintf("%s: %d", p.Name, p.Age)
}

func (p *person) Set(value string) error {
    if value == "" {
        return errors.New("값이 비어있습니다")
    }
    parts := strings.Split(value, ",")
    p.Name = parts[0]
    age, err := strconv.Atoi(parts[1])
    if err != nil {
        return err
    }
    p.Age = age
    return nil
}

위 예제에서 person 구조체와 이에 대한 String()Set() 메서드를 정의하여 커스텀 플래그를 만들었습니다.

이제 이 커스텀 플래그를 애플리케이션에서 사용할 수 있습니다.

func main() {
	p := person{}
	flag.Var(&p, "person", "이름,나이 형식으로 입력하세요")
	flag.Parse()
	fmt.Println("사용자 정보:", p)
}

이제 “person” 플래그를 사용하여 이름과 나이를 함께 입력할 수 있습니다.

flag 패키지를 사용하면 유연하고 강력한 방식으로 명령줄 플래그를 처리할 수 있습니다. 이를 통해 Golang으로 작성된 CLI 애플리케이션을 더욱 효율적으로 구축할 수 있습니다.

참고 자료