[go] go 언어에서의 플래그 관련 패턴과 아키텍처
Go 언어에서는 플래그(Flag)를 사용하여 프로그램 실행 시의 옵션을 설정할 수 있습니다. 플래그를 효과적으로 활용하기 위해 패턴과 아키텍처를 몇 가지 제안 드리겠습니다.
1. 플래그 사용하기
플래그를 사용하려면 flag
패키지를 import하여 플래그를 정의하고 값을 설정할 수 있습니다. 아래는 간단한 예제입니다.
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. 환경 변수와 설정 파일
플래그 외에도 환경 변수나 설정 파일을 통해 옵션을 설정할 수 있습니다. viper
와 같은 라이브러리를 사용하면 플래그, 환경 변수, 설정 파일을 일관된 방식으로 다룰 수 있습니다.
import (
"github.com/spf13/viper"
)
func main() {
viper.SetConfigName("config")
viper.AddConfigPath("/etc/appname/")
viper.AddConfigPath(".")
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("Fatal error config file: %s \n", err))
}
fmt.Println("Using config:", viper.ConfigFileUsed())
}
3. 싱글톤 패턴과 플래그
어떤 옵션을 프로그램 전역에서 사용해야 하는 경우, 해당 옵션을 싱글톤으로 관리하는 패턴을 고려할 수 있습니다. 아래는 싱글톤 패턴을 적용한 플래그 관리 예제입니다.
package main
var (
flagValue string
)
func GetFlagValue() string {
return flagValue
}
func SetFlagValue(newValue string) {
flagValue = newValue
}
이처럼 플래그를 싱글톤으로 관리하면 전역적으로 사용할 수 있으며, 응용 프로그램 내의 여러 모듈에 걸쳐 일관된 값을 제공할 수 있습니다.
위의 패턴과 아키텍처를 활용하여 Go 언어에서 플래그를 효율적으로 활용할 수 있습니다.